【问题标题】:Why is F# printfn not implemented in terms of Console.WriteLine?为什么 F# printfn 没有在 Console.WriteLine 方面实现?
【发布时间】:2016-09-12 22:04:04
【问题描述】:

我注意到使用 F# printfn 时出现意外行为。 它似乎将格式字符串分解为块并为每次调用 printfn 调用 Console.Write 多次。我希望它格式化整个字符串,然后调用 Console.WriteLine 一次。

我注意到了这一点,因为我使用 Console.SetOut 调用和我自己的 TextWriter 来拦截标准控制台输出,它试图在每一行输出前加上时间戳和一些额外的自定义文本。

什么给了?

【问题讨论】:

  • 查看这个帖子,似乎暗示它与数据验证有关:stackoverflow.com/questions/18551851/…
  • 如果你想为每一行添加前缀,你应该累积文本直到调用WriteLine。你有什么问题?
  • 是的,我可以这样做,但我只是想知道它为什么会这样。为什么要这样实施?对我来说,就整行文本的 WriteLine 单次调用而言,实现它似乎要直接得多。而不是将其分解为效率低得多的块,并且还会产生反直觉的行为

标签: f# printf console.writeline


【解决方案1】:

这是我的猜测,因为它的价值:

  1. 编译器会变魔术
  2. 在运行时,实现者知道 Write 将转到缓冲流,因此性能不会与使用 StringBuilder 对象及其 ToString() 覆盖之类的东西有很大不同。也许性能会更好,因为它们避免了对象分配。

【讨论】:

    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多