我正在查看切西库。我经常看到使用Trial.lift和Trial.bind函数。如果我正确理解它,Trial.lift将接受一个函数参数并执行并返回该函数,如果结果是成功的话。如果这是真的,Trial.bind不也做同样的事情吗?
发布于 2017-07-13 01:53:19
这些函数有细微的不同:在bind下,函数f必须返回Result<_>,而lift则接受任何普通函数。
可以这样想:bind将另一个可能失败的计算“附加”到以前的计算链中:
let isOdd x = if x % 2 = 0 then ok x else fail "Even!"
let x = ok 5
let oddX = x |> bind isOdd当lift将给定的函数从“普通”函数的世界“传输”到Result<_>函数的世界时:
let plus5 x = x + 5 // plus5 : int -> int
let liftedPlus5 = lift plus5 // lisftedPlus5 : Result<int,_> -> Result<int,_>
let seven = liftedPlus5 (ok 2)有一篇很好的文章是由尊敬的Scott撰写的,他以一种非常好和可以理解的方式来谈论这些事情:高架世界。我最喜欢的文章之一。
( 这里是关于bind的)
抱歉,如果您在上面的例子中发现了一些小错误--我现在还没有一个工作的F#环境来测试。
https://stackoverflow.com/questions/45069568
复制相似问题