计算表达式中的方法的msdn 文档Zero
指出
调用计算表达式中
else
的表达式的空分支。if...then
假设我们正在使用一个identity
没有Zero
定义的计算构建器。
let IdentityBuilder() =
member this.Bind(i, f) = f i
member this.Return(i) = i
let identity = new IdentityBuilder()
下面的代码是允许的
identity {
printf "Hello World"
return 1
}
但是,以下代码是不允许的,并且会因编译器错误而失败
仅当计算表达式构建器定义“零”方法时,才可以使用此控制构造
identity {
if true then printf "Hello World"
return 1
}
为什么编译器坚持调用Zero
分支else
?这背后的直觉是什么?