如何解决获取Option值或映射到任一T的同构方法
我有一个选项值传递给我的方法Foo
def Foo(barOpt: Option[Bar],barId: BarId): EitherT[Future,Error,Bar] = {
for {
bar <- barOpt.getOrElse(fetchBar(barId))
} yield bar
}
现在bar是Option [Bar],而fetchBar是EitherT [Future,Error,Bar]。如果不习惯使用bar或fetchBar,我该如何从中提取bar,因为这些类型无法解决我上面编写代码的方式。
解决方法
也许EitherT.fromOption
和orElse
的组合像这样
def foo(barOpt: Option[Bar],barId: BarId): EitherT[Future,Error,Bar] =
EitherT.fromOption[Future](barOpt,someError).orElse(fetchBar(barId))
,
另一种方法是使用Option.fold
。
def foo(barOpt: Option[Bar]): EitherT[Future,Bar] =
barOpt.fold(ifEmpty = fetchBar(barId))(bar => EitherT.pure[Future,Error](bar))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。