2010-06-05 50 views
32

我寫我的第一個F#庫F#的String.format

我試圖用string.Format,並抱怨說,沒有這樣的功能存在。

它不可用或我做錯了什麼?

回答

81

如果你想避免使用全名,你可以在F#中使用open

open System 
let s = String.Format("Hello {0}", "world") 

這應該在兩個F#交互工作(首先輸入open條款)和正常編譯的應用程序中。關鍵是你必須寫String大寫S。這是因爲C#中的string不是通常的類型名稱 - 它是一個指向System.String類型的關鍵字。

另外,你也可以看看sprintf函數。這是一個F#特異性替代String.Format其中有一些很好的優勢 - 例如,它是類型檢查:

let s = sprintf "Hello %s! Number is %d" "world" 42 

編譯器會檢查參數(字符串和INT)匹配字符串中的格式說明(%s和用於整數的%d)。該功能還更好地工作在要使用部分功能應用場景:

let nums = [ 1 .. 10 ] 
let formatted = nums |> List.map (sprintf "number %d") 

這將產生含「1號」的字符串,「2號」等的列表...如果你想做到這一點使用String.Format,你必須明確地寫一個lambda函數。

+2

我希望我可以upvote這兩次建議'sprintf',這是一個更好的選擇大多數時間。 – 2013-08-20 10:36:50

+2

'sprint'確實比較習慣,但在某些循環中頻繁調用時可能會變慢... – 2013-08-21 01:22:45

+0

哇,我很驚訝[F#中速度很慢'sprintf'](http://stackoverflow.com /問題/ 16742189 /性能的-的sprintf VS字符串格式)。好點子。 – 2013-08-21 13:00:51

3

它的全稱是:

System.String.Format 
+0

謝謝,添加使用系統的竅門 – mamu 2010-06-05 05:11:24

+0

我的意思是開放的系統,C#塞滿無處不在:) – mamu 2010-06-05 05:12:03