我發現書中Expert F# 4.0, Fourth Edition
以下,由Don賽姆,亞當Granicz和安東尼奧奇斯泰尼諾:這個定義爲什麼會返回一個函數?
let generateStamp =
let mutable count = 0
(fun() -> count <- count + 1; count)
我不明白爲什麼這個代碼創建了一個功能:
val generateStamp : (unit -> int)
它看起來我喜歡它的簽名應該是
val generateStamp : int
例如,下面的代碼:
let gS =
let mutable count = 0
(printfn "%d" count; count)
創建一個int值:
val gS : int = 0
據我瞭解它的代碼(fun() -> count <- count + 1; count)
應首先評估拉姆達然後count
。所以generateStamp
的值應該只是count
,因爲它在gS
的定義中。我錯過了什麼?
'fun x - > y'是一個函數文字 - 它創建一個新的函數,但不評估它。在你的代碼中,新創建的函數是返回值,所以你看到'generateStamp'的值與創建的函數具有相同的類型。 – Yawar
@Yawar - 你可能是對的,但我不明白爲什麼新創建的函數是返回值。爲什麼返回值不是一個int,因爲'count'是最後一個要評估的事物,F#沒有'return'關鍵字,總是返回最後一個評估的事物? – Soldalma
看到這個了不起的答案http://stackoverflow.com/a/42430195/20371 – Yawar