首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在切西错误处理方面,Trial.lift和Trial.bind有什么区别?

在切西错误处理方面,Trial.lift和Trial.bind有什么区别?
EN

Stack Overflow用户
提问于 2017-07-13 00:24:28
回答 1查看 215关注 0票数 5

我正在查看切西库。我经常看到使用Trial.lift和Trial.bind函数。如果我正确理解它,Trial.lift将接受一个函数参数并执行并返回该函数,如果结果是成功的话。如果这是真的,Trial.bind不也做同样的事情吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 01:53:19

这些函数有细微的不同:在bind下,函数f必须返回Result<_>,而lift则接受任何普通函数。

可以这样想:bind将另一个可能失败的计算“附加”到以前的计算链中:

代码语言:javascript
复制
let isOdd x = if x % 2 = 0 then ok x else fail "Even!"
let x = ok 5
let oddX = x |> bind isOdd

lift将给定的函数从“普通”函数的世界“传输”到Result<_>函数的世界时:

代码语言:javascript
复制
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#环境来测试。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45069568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档