F#中的不同函数定义

时间:2014-06-29 12:05:38

标签: f#

新问题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/

1 个答案:

答案 0 :(得分:2)

let loggedWorkflow = ...正在定义。一旦达到定义(通常在加载模块s时)就对主体进行评估,并且记住loggedWorkflow的值作为评估正文的结果,并在每次有人评估时返回s.loggedWorkflow

let loggedWorkflow() = ...定义了一个函数,它接受unit类型的单个参数 - 此类型的唯一值是(),通常也发音为&# 34;单元&#34 ;.身体不会立即得到评估,但只有在实际调用该函数时才会被评估。每次通过实际传递类型unit的参数来调用它,例如使用s.loggedWorkflow(),评估正文并返回结果值。