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 } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |