【发布时间】:2015-08-05 17:49:39
【问题描述】:
我想创建一个函数,它将StringFormat 作为参数,在其前面添加一个任意字符串,并返回一个函数,该函数采用正确数量和类型的参数,并返回一个使用sprintf 创建的字符串和改变格式。
目标是创建一个产生这样结果的函数(前面的字符串是#):
xprintf "%d-%.2f" 5 5. // -> "#5-5.00"
xprintf "%A" [42] // -> "#[42]"
我天真地尝试过以下操作:
let xprintf (format: Printf.StringFormat<'a>) = Printf.StringFormat<'a>(string format |> (+) "#") |> sprintf
确实可以编译,但是当我在运行时使用它时,我得到了一个InvalidCastException。我开始认为这种方法不可能奏效。可以自定义PrintFormat 吗?关于如何在不平凡的层面上使用各种格式化程序的文章/指南似乎非常稀缺。
【问题讨论】:
-
在正文中尝试
format.Value而不是仅仅format。 -
@kvb 是的,似乎有效。
标签: f# string-formatting