Tho*_*mas 5 f# computation-expression
使用 FsToolkit.ErrorHandling 并查看此示例时:
testCase "Happy Path Result" <| fun () ->
let actual : Validation<int, string> = validation {
let! a = Ok 3
and! b = Ok 2
and! c = Ok 1
return a + b - c
}
Run Code Online (Sandbox Code Playgroud)
和是什么意思!?看起来就像让!被映射到 Result.bind,但我没有看到let! 之间有不同的行为!和!
据我所知,它看起来像是替换并且!与让!保持相同的行为。
我刚刚开始涉足计算表达式,事情开始有意义,尽管我不太明白为什么 F# 关键字(如 let )和实际函数(如 bind)之间有不同的命名法,因此它增加了一层混乱。所以这个问题的答案可能是显而易见的:)
这是F# 5.0 中引入的对“应用计算表达式”的新支持。
let!和之间的区别and!在于,let!允许值依赖于先前的结果,而and!不允许。这对于您的计算是应用程序而不是完整的 monad 的情况很有用,或者当您想要在计算中并行执行独立步骤时。
例如,let!你可以这样写:
let! a = Ok 3
let! b = Ok (2 * a) // Allowed: value of b depends on a
Run Code Online (Sandbox Code Playgroud)
但你不能这样写:
let! a = Ok 3
and! b = Ok (2 * a) // Not allowed: value of b depends on a
Run Code Online (Sandbox Code Playgroud)