2009-03-05 42 views
4

F#在编译时如何检查格式字符串以确定x在以下定义中具有int类型?格式字符串中的F#类型推断

let foo x = sprintf "%d" x`? 

这是硬编码到语言或可能有人编写使用格式字符串用不同的语法自己的“my_print”功能?例如:

let foo x = my_print "{integer}" x 

回答

3

你可以阅读一些关于它在6.4.17(“的printf”格式)here,但简要地说

  • 它内置在语言
  • 字符串文字可以有效地“裹挟”进怪异的“格式”型
  • printf和朋友们期待的格式类型的第一个参数,使得强制发生

最终结果是您可以构建自己的printf样式函数,但必须使用相同的%s格式,因为这些内容是内置的。

3

Here是一个如何在F#中构建自己的printf样式函数的示例。您无法更改格式说明符(例如“%d”),但可以利用现有的说明符来构建编译器将键入的其他字符串格式化函数。