新问题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/
答案 0 :(得分:2)
let loggedWorkflow = ...
正在定义值。一旦达到定义(通常在加载模块s
时)就对主体进行评估,并且记住loggedWorkflow
的值作为评估正文的结果,并在每次有人评估时返回s.loggedWorkflow
。
let loggedWorkflow() = ...
定义了一个函数,它接受unit
类型的单个参数 - 此类型的唯一值是()
,通常也发音为&# 34;单元&#34 ;.身体不会立即得到评估,但只有在实际调用该函数时才会被评估。每次通过实际传递类型unit
的参数来调用它,例如使用s.loggedWorkflow()
,评估正文并返回结果值。