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