我正在寻找国际象棋图书馆.我经常看到正在使用Trial.lift和Trial.bind函数.如果我理解正确,Trial.lift接受一个函数参数并执行并返回该函数,如果管道中的结果是成功的.如果这是真的,那么Trial.bind不会做同样的事情吗?
Fyo*_*kin 10
这些函数略有不同:在bind函数下,函数f必须返回a 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
Run Code Online (Sandbox Code Playgroud)
同时lift将"普通"功能世界中的特定功能"传输"到功能世界中Result<_>:
let plus5 x = x + 5 // plus5 : int -> int
let liftedPlus5 = lift plus5 // lisftedPlus5 : Result<int,_> -> Result<int,_>
let seven = liftedPlus5 (ok 2)
Run Code Online (Sandbox Code Playgroud)
古老的Scott Wlaschin发表了一篇非常好的文章,以一种非常好的和可理解的方式谈论这些事情:高架世界.我最喜欢的文章之一.
(这里有一个关于bind)
PS对不起,如果你在上面的例子中发现了小错误 - 我现在没有可用的F#环境进行测试.
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |