2014-06-29 58 views
1

Newby question f#related,F#中的不同函數定義#

f#中這些定義有什麼區別?

module s 
    let log p = 
     printfn "expression is %A" p 

    let loggedWorkflow = 
     let x = 42 
     log x 
     let y = 43 
     log y 
     let z = x + y 
     log z 
     z 

s.loggedWorkflow 

而這一次

module s 
    let log p = 
     printfn "expression is %A" p 

    let loggedWorkflow() = 
     let x = 42 
     log x 
     let y = 43 
     log y 
     let z = x + y 
     log z 
     z 

s.loggedWorkflow() 

第一個不叫內日誌,那麼只返回z值 爲什麼是這樣工作的?

謝謝:)

是限定我藉此樣品從 http://fsharpforfunandprofit.com/posts/computation-expressions-intro/

回答

2

let loggedWorkflow = ...。一旦達到定義(通常當模塊s被加載時),身體就被評估,並且loggedWorkflow的值被記憶爲評估身體的結果,並且每次有人評估時返回s.loggedWorkflow

let loggedWorkflow() = ...被限定函數這需要unit類型的單個參數 - 該類型的唯一值是(),通常也讀作「單元」。身體不會被直接評估,而只是在實際調用函數時。每次通過實際傳遞類型爲unit的參數(例如,與s.loggedWorkflow(),評估身體並返回結果值。

+0

謝謝,現在我明白了。 – jgoday

相關問題