我想编写F#printfn函数的扩展版本,该功能除了显示文本外还显示当前时间。像这样:
let printimefn fmt =
let time = DateTime.Now
let strtime = sprintf "%02d:%02d:%02d" time.Hour time.Minute time.Second
printfn "%s %A" strtime fmt
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不能按预期工作。“ fmt”参数丢失其类型Printf.TextWriterFormat <'T>。
我可以通过使用类型注释来强制其类型:
let printimefn (fmt : Printf.TextWriterFormat<'T>) =
let time = DateTime.Now
let strtime = sprintf "%02d:%02d:%02d" time.Hour time.Minute time.Second
printfn "%s %A" strtime fmt
Run Code Online (Sandbox Code Playgroud)
但随后printimefn的结果变为单位,而不是'T。因此它仍然不起作用。我想知道编写自定义printfn函数的正确方法是什么。
这可以用 Printf.ksprintf
let printimefn fmt =
let time = DateTime.Now
Printf.ksprintf (
fun s ->
printfn "%02d:%02d:%02d %s" time.Hour time.Minute time.Second s)
fmt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |