加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何将[Future [A],Future [B]]转换为Future [Aither [

发布时间:2020-12-16 08:55:07 所属栏目:安全 来源:网络整理
导读:我有一个[Future [A],Future [B]]的实例,我想将它转换为Future [Aither [A,B]]. 从my previous question开始,cats 0.8.1已经发布,改变了库的结构并放弃了Xor而选择了Either,这在2.12中是正确的. 因此,先前接受的答案中描述的方法不再起作用.我试图找到适当的
我有一个[Future [A],Future [B]]的实例,我想将它转换为Future [Aither [A,B]].

从my previous question开始,cats 0.8.1已经发布,改变了库的结构并放弃了Xor而选择了Either,这在2.12中是正确的.

因此,先前接受的答案中描述的方法不再起作用.我试图找到适当的导入但失败了.

cats.instances.either._
cats.implicits._ 
cats.syntax.bitraverse._

看起来似乎有道理,但不幸的是没有用.编译仍然失败,值为bisequence不是Either [scala.concurrent.Future [A],scala.concurrent.Future [B]]的成员

将导入扩展为* .all._并未更改编译器错误.

我在scala 2.11.8上,因为项目所依赖的所有库都没有发布2.12版本

解决方法

为了方便读者,我们从评论中汇编了答案:

1:你可以用普通的scala(在这里使用cats.Functor定义)来实现它,由@wheaties&提供. @让 – 菲利普的粒料

def eitherFmap[F[_],A,B](either: Either[F[A],F[B])(implicit F: Functor[F]): F[Either[A,B]] =   
either.fold(f => F.map(f)(Left(_)),f => F.map(f)(Right(_)))

2:由于进口冲突,猫的双序拒绝编译:这里单个导入就够了 – @kolmar友情提供

import cats.instances._
...
val futureOfEither = eitherOfFutures.bisequence

3:阅读cats import guide以避免将来出现问题 – @ peter-neyens礼貌

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读