Tri*_*Gao 2 f# string-formatting
在F#中至少有3种方法可以构建字符串:
我应该在F#中坚持哪一个?
在一般情况下,你应该使用printf基础的功能(例如,sprintf,bprintf在F#代码),他们是类型安全:编译器检查在编译时的格式字符串,并确保你传递了正确的参数类型.
这确实有一个缺点 - 但是在F#2.0和3.0中,printf基于功能的功能非常慢(搜索StackOverflow或谷歌,你会发现有关它的问题和博客文章).如果偶尔使用它们,它们不会影响应用程序的整体性能,但如果您经常调用它们,您会发现应用程序运行速度变慢.值得庆幸的是,这已经针对即将发布的F#3.1版本进行了修复.
至于其他选项,你应该尽可能避免字符串连接,因为它相对较慢并且还会产生额外的内存/ GC开销.如果你正在实现一些性能敏感的日志记录而你不能等待F#3.1,那么String.Format是你最好的选择; 为了模仿printf基于函数提供的类型安全性,您可以将对String.Format的每个调用移动到单独的函数中,然后使用类型注释显式指定参数类型.例如:
/// Prints the number of entries in a specified file to the console.
let inline printNumEntriesInFile (filename : string) (count : int) =
System.String.Format ("The file '{0}' contains {1} entries.", filename, count)
Run Code Online (Sandbox Code Playgroud)