scala - 为什么不能将 Eithers 列表展平?

标签 scala

当我写作时

println(List[String Either Int](Left("Boom"), Right(42)).flatten)

编译器提示

ScalaFiddle.scala:16: error: No implicit view available from Either[String,scala.this.Int] => collection.this.GenTraversableOnce[B].
  println(List[String Either Int](Left("Boom"), Right(42)).flatten)
                                                           ^
ScalaFiddle.scala:16: error: not enough arguments for method flatten: (implicit  asTraversable: scala.this.Function1[Either[String,scala.this.Int],collection.this.GenTraversableOnce[B]])immutable.this.List[B].
Unspecified value parameter asTraversable.
  println(List[String Either Int](Left("Boom"), Right(42)).flatten)
                                                           ^

编译器输出的 GenTraversableOnce[B] 中的 B 是什么?

最佳答案

因为没有从EitherRightLeft的隐式转换,你不能使用flatMap (flatten) 在 EitherList 上。详情 here .


如果想法是摆脱 Left 元素并获取 Right 元素中包含的内容,那么对于此输入:

val list = List[Either[String, Int]](Left("Boom"), Right(42))

你可以调用:

list.flatMap(_.right.toOption)

或:

list.collect{ case Right(x) => x }

两者都产生:

res0: List[Int] = List(42)

链接到 Either , RightProjectioncollect

关于scala - 为什么不能将 Eithers 列表展平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49829826/

相关文章:

scala - 如何编辑akka application.conf

scala - 为什么这个简单的隐式 stringToInt 函数会导致堆栈溢出?

scala - 如何将变量转换为从 Scala 中的 TypeCast 获得的特定运行时类型

scala - Spark cassandra 连接器在独立 Spark 集群中不起作用

java - Play framework + Ebean : [error] . .. 未找到:类型 Finder

scala - Play 2.3.8 的多个 SLF4J 绑定(bind)

scala - _= :=typeOf[_] tests in Scala macros 链的模式匹配语法替代方案

algorithm - 列表性能优化

scala - 无形(scala)中的 "at"是什么?

scala - 在 intellij 中处理虚假未使用导入的最佳方法