let p = printfn "something"
它将一次性地评估表达式。对p
的任何后续引用都将评估为单位。
从理论上讲,函数的定义是合理的。函数应该只针对相同的输入返回相同的结果。
但是如果我想要出现副作用(即输出到屏幕),那么我需要向p传递一个参数。通常这个参数是unit
值。
let p () = printfn "something"
但是为什么 F# 会在每次应用函数时都评估函数,即使参数每次都相同?难道不应该像第一个情况一样应用相同的推理吗?函数的输入 p
没有改变,因此没有必要评估它超过一次。
printfn“something”
立即返回的值,而第二个看起来像是你定义了一个可以被调用的函数p。 - Marcus Müller