【问题标题】:Conditionally combine enumeratees有条件地组合枚举值
【发布时间】:2013-05-29 10:44:57
【问题描述】:

有没有人遇到过这段代码来实现枚举的条件组合?基本上我有

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] = ???

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

【问题讨论】:

标签: scala playframework-2.0


【解决方案1】:

这是either的定义:

def either[A, B, C](left: Enumeratee[A, C], right: Enumeratee[B, C])
  (implicit ec: ExecutionContext) = new Enumeratee[Either[A, B], 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 }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-29
    • 2015-08-03
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多