msdn文档中对于计算表达式中Zero
方法的解释如下:
在计算表达式中,用于处理
if...then
语句中空的else
分支。
假设我们正在使用一个未定义Zero
的identity
计算生成器。
let IdentityBuilder() =
member this.Bind(i, f) = f i
member this.Return(i) = i
let identity = new IdentityBuilder()
以下代码是允许的
identity {
printf "Hello World"
return 1
}
然而,下面的代码是不允许的,并会因编译器错误而失败
只有计算表达式构建器定义了“Zero”方法才能使用此控制结构
identity {
if true then printf "Hello World"
return 1
}
编译器为什么坚持要在else
分支中调用Zero
函数?这背后的原理是什么?
if
与计算表达式的if
不同,它很可能会按预期工作:ignore <| if true then printf "Hello World"
。 - kkmif
和在表达式右侧使用if
之间的区别。 - kkm