当我运行以下代码时,我从mySum打印出5050.我已经定义了mySum,但从未调用它.怎么打印呢?也许这很奇怪,因为我的背景是Haskell而且我习惯于传递IO monad来做事情 - 在F#中如何/何时评估事物?
type main = obj [] -> int
let mySum = [1..100] |> List.sum |> printfn "%i"
[<EntryPoint>]
let main argv =
0
Run Code Online (Sandbox Code Playgroud)
Tea*_*Dev 13
我已经定义了mySum,但从未调用它.
mySum不是一个函数,因为它不需要参数.一个函数必须至少有一个参数; 如果没有任何"有用"可以传递,那通常就是unit价值().
mySum是一个价值; 更具体地说,您将表达式的值绑定[1..100] |> List.sum |> printfn "%i"到名称mySum.反过来(),这个值printfn只会导致副作用并返回unit.绑定值时立即计算表达式,剩下的全部是副作用和实际值.
作为一个函数,mySum看起来像这样:
let mySum () = [1..100] |> List.sum |> printfn "%i"
Run Code Online (Sandbox Code Playgroud)
并称它为简单
mySum ()
Run Code Online (Sandbox Code Playgroud)
这将导致5050打印出值,()并且将自动忽略返回值.