2016-02-12 48 views
5

F#有它自己的字符串操作庫嗎?F#有它自己的字符串操作庫嗎?

當我試圖學習F#時,我發現自己使用現有的System.string方法?

我應該這樣做嗎?

代碼:

open System 

type PhoneNumber = 
    { CountryCode:int 
     Number:string } 

// b. Create a function formatPhone that accepts a PhoneNumber record and formats it to look like something like this: "+44 1234 456789" 
let formatPhone phoneNumber = 

    let getLeadingCharacters (length:int) (text:string) = 
     text.Substring(0, length) 

    let getLastCharacters (length:int) (text:string) = 
     text.Substring(text.Length - length, length) 

    printf "+%i %s %s" phoneNumber.CountryCode 
         (phoneNumber.Number |> getLeadingCharacters 4) 
         (phoneNumber.Number |> getLastCharacters 6) 

formatPhone { CountryCode=44; Number="123456789" };; 

UPDATE

更新功能從:

let formatPhone phoneNumber = 

    let getLeadingCharacters (length:int) (text:string) = 
     text.Substring(0, length) 

    let getLastCharacters (length:int) (text:string) = 
     text.Substring(text.Length - length, length) 

    printf "+%i %s %s" phoneNumber.CountryCode 
         (phoneNumber.Number |> getLeadingCharacters 4) 
         (phoneNumber.Number |> getLastCharacters 6) 

formatPhone { CountryCode=44; Number="123456789" };; 

到:

let formatPhone phoneNumber = 

    printf "+%i %s %s" phoneNumber.CountryCode 
         phoneNumber.Number.[0..3] 
         phoneNumber.Number.[4..8] 

formatPhone { CountryCode=44; Number="123456789" };; 
+2

我創造這樣的小*反腐敗功能*像'getLeadingCharacters'所有的時間。它讓我覺得非常正常。 –

+0

「反腐敗」? –

+1

從[DDD](http://amzn.to/WBCwx7)中的術語*反腐敗層*獲得通過。 –

回答

8

不,F#沒有重複.NET庫的特定String library。它確實有一個帶有額外字符串函數的string module

是的,使用.NET函數。

F#可以利用所有.NET庫的事實是它最強大的特性之一。首先,使用元組參數將使用curried參數的函數與.NET中的函數混合起來看起來很奇怪。

這就是爲什麼在NuGet中你會看到也有FSharp擴展的軟件包。例如MathNet NumericsMathNet Numerics FSharp。這些是封裝函數,允許使用.NET庫的慣用F#。

當尋找使用F#的函數和方法時,我經常使用這個技巧。 要搜索.NET,請使用class作爲關鍵字,並使用module作爲關鍵字搜索F#特定代碼。

例如:

谷歌:MSDN string class
第一項:String Class

谷歌:MSDN string module
第一項:Core.String Module (F#)

+0

你是一個知識財富。我如何關注你?例如,YouTube,Blogs,Podcast等... –

+2

我通過遵循[F#top answers](http://stackoverflow.com/tags/f%23/topusers)並閱讀大部分的知識新的問題在這裏。我在[CiteSeer](http://citeseer.ist.psu.edu/index)上閱讀了大量研究論文,並撰寫了大量的代碼。過去幾個月,我花了很多時間研究神經網絡的基礎知識,並且遇到了問題,即使需要一週或更長的時間才能解決問題。我最近了解到,調整神經網絡的最佳方法之一是使用可視化圖像,而不是查看所有權重和偏見的值。 –