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

scala – 有条件地结合枚举

发布时间:2020-12-16 18:46:47 所属栏目:安全 来源:网络整理
导读:有没有人遇到过这段代码来实现枚举的条件组合?基本上我得到了 val decideEnumeratee : Enumerate[A,Either[L,R] = Enumerate.map(a=???)val leftSideEnumeratee : Enumeratee[L,B] = Enumeratee.map(l=???)val rightEnumeratee: Enumeratee[R,B] = Enumerat
有没有人遇到过这段代码来实现枚举的条件组合?基本上我得到了

val decideEnumeratee : Enumerate[A,Either[L,R] = Enumerate.map(a=>???)
val leftSideEnumeratee : Enumeratee[L,B] = Enumeratee.map(l=>???)
val rightEnumeratee: Enumeratee[R,B] = Enumeratee.map(r=>???)

我想实现以下组合器:

def either[L,R,B](left:Enumeratee[L,B],right,Enumeratee[R,B]): Enumeratee[Either[L,R],B] = ???

有没有人遇到类似的枚举实现?

解决方法

以下是两者的定义:

def either[A,B,C](left: Enumeratee[A,C],right: Enumeratee[B,C])
  (implicit ec: ExecutionContext) = new Enumeratee[Either[A,C] {
    def applyOn[IR](inner: Iteratee[C,IR]) = {
      val (liter,lenum) = Concurrent.joined[C]
      val (riter,renum) = Concurrent.joined[C]
      val liter2 = Enumeratee.mapConcat { x: Either[A,B] =>
          x.left.toSeq
        } compose left transform liter
      val riter2 = Enumeratee.mapConcat { x: Either[A,B] =>
          x.right.toSeq
        } compose right transform riter
      val fresult = lenum interleave renum apply inner
      Enumeratee.zip(liter2,riter2) mapM { _ => fresult }
    }
}

(编辑:李大同)

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

    推荐文章
      热点阅读