2010-06-05 81 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