我可以将StringFormat用作TextWriterFormat吗? kfprintf / kprintf用法

时间:2013-04-26 06:45:11

标签: f# printf

我有登录控制台的功能

        Printf.kprintf
            (printfn
                "[%s][%A] %s"
                    <| level.ToString()
                    <| DateTime.Now)
                    format // fprint to System.Console.Out maybe

但它使用Printf.StringFormat作为格式,现在我想遵循相同的逻辑并将其打印到文件。

所以我试试

        Printf.kfprintf 
            (fun f -> 
                fprintfn file "[%s][%A] " 
                        <| level.ToString()
                        <| DateTime.Now
                ) file (format)

有两件事我无法理解。为什么unit -> 'A代替string -> 'A?我该怎么用?我可以在StringFormat使用我的TextWriterFormat吗?

另一个问题是,在第一个代码段中,我将format继承到string -> 'Result,但在kfprintf中我无法执行此操作,因为unit -> 'Result和格式消息出现在{{{ 1}}东西。我想我可以以某种方式继承[x][x]format,但我找不到好的例子,我找到的唯一一个是F#编译器的一部分:

f

但我怎样才能使用此[<CompiledName("PrintFormatToTextWriter")>] let fprintf (os: TextWriter) fmt = kfprintf (fun _ -> ()) os fmt [<CompiledName("PrintFormatLineToTextWriter")>] let fprintfn (os: TextWriter) fmt = kfprintf (fun _ -> os.WriteLine()) os fmt ?如何在留言后发帖子?

1 个答案:

答案 0 :(得分:4)

我认为您不需要使用Printf.kfprintf,因为内部 Printf.kprintf使用fprintfn,您可以继续使用TextWriter

let logToWriter writer level format =
    Printf.kprintf (fprintfn writer "[%s][%A] %s" 
                    <| level.ToString() 
                    <| System.DateTime.Now) format

另请参阅this了解使用Printf.kfprintf

的示例