繁体   English   中英

为什么printfn会立即在f#中打印?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM