至少有 3 种方法可以在 F# 中构建字符串:
- 良好的旧连接(沿途使用 .ToString(someFormat) )
- 使用 .NET 的方法 String.Format
- 使用 sprintf 函数
我应该在 F# 中坚持哪一个?
至少有 3 种方法可以在 F# 中构建字符串:
我应该在 F# 中坚持哪一个?
通常,您应该在 F# 代码中使用printf
基于 - 的函数(例如 , sprintf
)bprintf
,它们是类型安全的:编译器在编译时检查格式字符串并确保您传递了正确的参数类型。
然而,这确实有一个缺点——在 F# 2.0 和 3.0 中,printf
基于 - 的函数非常慢(搜索 StackOverflow 或 Google,您会找到有关它的问题和博客文章)。如果您偶尔使用它们,它们不会影响您的应用程序的整体性能,但如果您经常调用它们,您会注意到您的应用程序变慢了。值得庆幸的是,这已在即将发布的 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)