2017-04-21 170 views
3

我注意到有一個小寫String.concatMicrosoft.FSharp.Core和一個大寫System.String.Concat有幾個重載。智能感知挑選一個或另一個,如果我鍵入String.cSystem.String.Cconcat in FSharp.Core.String vs Concat in System.String

是在Microsoft.FSharp.CoreString.xyz功能最好System.String.Xyz功能或周圍的其他方式?每種功能的優缺點是什麼?

一般來說,在FSharp.Core中使用函數有哪些優缺點?

回答

4

我不知道這2是相同的:

FSharp的String.concat用於連接字符串序列爲一個字符串用分隔符:

let strings = [ "tomatoes"; "bananas"; "apples" ] 
let fullString = String.concat ", " strings 
printfn "%s" fullString 

System.String.Concat用來連接2 (或更多)將字符串分開。

System.String.Join相同FSharp的String.concat - 它只是因爲它的包裝actually

[<CompiledName("Concat")>] 
let concat sep (strings : seq<string>) = 
    String.Join(sep, strings) 

當編寫F#,你會發現它更地道超過從其他.NET的那些調用F#的功能組件。例如,您可以部分應用F#函數,但您無法使用.NET方法調用。

例如總是有空間concats功能可以定義如下所示:

let concatWithSpace xs = 
    String.concat " " xs 

如果它建模爲你的域名,例如的一部分變得更有用而不是concatWithSpace,它可以被稱爲formatReportElements或有意義的東西。

+0

所以'FSharp.Core.String'的好處是它的具有多個參數的函數能夠部分應用,而'System.String'中的多參數函數不是必須的,因爲它們必須將它們的參數包含在圓括號中? (如果'System.String'函數只帶一個參數,則可以跳過圓括號) 還有其他優點嗎? – Soldalma

+4

「curried」形式的一大優點是部分應用程序可讓您將該功能包含在管道鏈中。例如'[1..10] |> List.filter isOdd |> List.map(fun n - > n * 10)|> List.map(sprintf「%d」)|> String.concat「,」'產生字符串'「10,30,50,70,90」(如果你已經定義了'isOdd',當然)。而在該管道中使用'System.String.Join',則必須編寫'|>(fun lst - > System.String.Join(「,」,lst))''。我寧願寫'String.concat',''而不是'(fun lst - > System.String.Join(「,」,lst))':它更容易閱讀和理解前者的功能。 – rmunn