F#string.Format

mam*_*amu 40 f#

我正在写我的第一个F#库

我试图使用string.Format它并抱怨没有这样的功能.

它不可用或我做错了什么?

Tom*_*cek 102

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

open System
let s = String.Format("Hello {0}", "world")
Run Code Online (Sandbox Code Playgroud)

这应该在F#interactive(open首先输入子句)和正常编译的应用程序中都有效.关键是你必须String用大写字母写S.这是因为stringC#不是通常的类型名称 - 它是一个引用System.String类型的关键字.

或者,您也可以查看该sprintf功能.它是一种F#特定的替代品String.Format,有一些很好的好处 - 例如它是类型检查:

let s = sprintf "Hello %s! Number is %d" "world" 42
Run Code Online (Sandbox Code Playgroud)

编译器将检查参数(string和int)是否与格式说明符匹配(%s对于字符串和%d整数).在要使用部分函数应用程序的情况下,该函数也可以更好地工作:

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

这将产生一个包含"数字1","数字2"等字符串的列表......如果你想使用它String.Format,你必须显式写一个lambda函数.

  • @Jordan:从F#3.1开始,sprintf的运行速度提高了40倍(参见"Printf性能"[这里](http://blogs.msdn.com/b/fsharpteam/archive/2013/06/27/announcing-a-预发行-的-F-3-1和最直观-F-工具功能于视觉工作室2013.aspx)). (7认同)
  • C#6字符串插值非常好.好像它属于F#.希望分享. (7认同)
  • 我希望我可以两次提出这个建议`sprintf`,这在大多数情况下都是更好的选择. (3认同)
  • `sprint`肯定更惯用,但在某些循环中频繁调用时可能会慢一些...... (2认同)