gpt4 book ai didi

f# - Trial.lift 和 Trial.bind 在 chessie 错误处理中的区别是什么?

转载 作者:行者123 更新时间:2023-12-04 17:16:01 26 4
gpt4 key购买 nike

我正在调查 chessie图书馆。我经常看到 Trial.lift 和 Trial.bind 函数被使用。如果我理解正确, Trial.lift 接受一个函数参数,如果管道输入的结果成功,则执行并返回该函数。如果这是真的,难道 Trial.bind 不会做同样的事情吗?

最佳答案

这些功能略有不同:在 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 Wlaschin 撰写了一篇非常好的文章,以非常友好且易于理解的方式讨论了这些事情: Elevated World .我最喜欢的文章之一。
(而 here 是关于 bind 的一个)

附言抱歉,如果您在上面的示例中发现了小错误 - 我现在没有一个可用的 F# 环境来测试。

关于f# - Trial.lift 和 Trial.bind 在 chessie 错误处理中的区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45069568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com