gpt4 book ai didi

.net - System.Console.WriteLine() 与 F# 中的 printfn

转载 作者:行者123 更新时间:2023-12-03 12:26:54 27 4
gpt4 key购买 nike

F# 中的以下两个语句有什么区别?
与彼此相比,它们有什么优点或缺点(不包括明显的语法差异)?

我知道 WriteLine() 是 .NET 的一部分,但不明白这可能有什么含义。

示例代码:

printfn "This is an integer: %d" 5
System.Console.WriteLine("This is an integer: {0}" , 5)

最佳答案

printfn它的各种表亲有几个优点:

  • 他们是 较短 .
  • 他们可以做一些静态类型检查 ;即 printfn "%d" "bad type"不会编译。
  • ...但您不必进行静态类型检查; %O打印任何对象
  • 他们可以打印 “智能”表示 对于数组、元组和带有 %A 的可区分联合之类的东西
  • 它们可以部分应用;即 printfn "%d, %d" 3是一个有效的表达式。这特别好,因为编译器可以检查您在以后使用此子表达式时是否实际应用了正确数量的参数 - 与 Console.WriteLine 不同。这将很乐意接受太多或太少的参数。

  • 在实践中,最常见的部分应用程序可能只包含格式字符串;例如
    let printParticle = printfn "Particle at (%d, %d), state %A, p = %f"

    printParticle 2 3 //compile time warning about ignored value
    printParticle 3 4 someState 0.4 //fine
    printParticle 5 6 someState 0.4 0.7 //compile-time error

    但是,在 F# 3.1 之前,它也是 .它的速度足以让编码器跟上您的步伐,但是如果您以某种形式的序列化使用它,它可能会变成瓶颈。 F# 3.1 release announcement (作为 Visual Studio 2013 的一部分分发)声称可以显着提高性能,尽管我尚未验证这一点。

    就我个人而言,我通常使用 printfn 进行探索性编码,然后我基本上坚持 %A偶尔会加入其他说明符。但是,.NET 原生字符串格式在某些情况下仍然有用,因为它具有详细的区域性和格式相关选项。如果您想要最大速度直接连接(或 StringBuilder )将很容易胜过两者,因为这避免了解释格式字符串。

    关于.net - System.Console.WriteLine() 与 F# 中的 printfn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17071890/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com