[英]Why does printfn print immediately in f#?
当我运行以下代码时,我从mySum打印出5050。 我已经定义了mySum,但从未调用它。 怎么打印呢? 也许这很奇怪,因为我的背景是Haskell而且我习惯于传递IO monad来做事情 - 在F#中如何/何时评估事物?
type main = obj [] -> int
let mySum = [1..100] |> List.sum |> printfn "%i"
[<EntryPoint>]
let main argv =
0
我已经定义了mySum,但从未调用它。
mySum
不是一个函数,因为它不需要参数。 一个函数必须至少有一个参数; 如果没有任何“有用”可以传递,那通常是unit
值()
。
mySum
是一个价值; 更具体地说,您将表达式[1..100] |> List.sum |> printfn "%i"
的值绑定到名称mySum
。 该值依次为()
,因为printfn
仅引起副作用并返回unit
。 绑定值时立即计算表达式,剩下的全部是副作用和实际值。
作为一个函数, mySum
看起来像这样:
let mySum () = [1..100] |> List.sum |> printfn "%i"
并称它为简单
mySum ()
这将导致打印出值5050
,并且将自动忽略()
的返回值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.