至少有3种方法可以在F#中构建字符串:
我应该在F#中坚持哪一个?
答案 0 :(得分:5)
通常,您应该在F#代码中使用基于printf
的函数(例如,sprintf
,bprintf
),它们是类型安全的:编译器检查格式字符串编译时,确保传递正确的参数类型。
这有一个缺点,但是在F#2.0和3.0中,基于printf
的功能非常慢(搜索StackOverflow或谷歌,你会发现有关它的问题和博客文章)。如果偶尔使用它们,它们不会影响应用程序的整体性能,但如果您经常调用它们,您会发现应用程序运行速度变慢。谢天谢地,this has been fixed for the upcoming F# 3.1 release。
至于其他选项,应尽可能避免字符串连接,因为它相对较慢并且还会产生额外的内存/ 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)