题
F# 如何在编译时检查格式字符串以确定 x 在以下定义中具有 int 类型?
let foo x = sprintf "%d" x`?
这是硬编码到语言中的还是有人可以编写自己的“my_print”函数来使用具有不同语法的格式字符串?例如:
let foo x = my_print "{integer}" x
解决方案
您可以在 6.4.17 中阅读一些相关内容(“printf”格式) 这里, ,但简单地说
- 它内置于语言中
- 字符串文字可以有效地“强制”为奇怪的“Format”类型
- printf 和朋友期望 Format 类型的第一个参数,从而使强制发生
最终结果是您可以构建自己的 printf 样式函数,但必须使用相同的 %s 格式,因为这些东西是内置的。
其他提示
此处是您如何构建自己的printf-的示例F#中的样式函数。您无法更改格式说明符(例如“%d”),但您可以利用现有的说明符来构建编译器将键入的其他字符串格式化函数。
不隶属于 StackOverflow