簡體   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