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