【发布时间】:2017-01-18 03:39:21
【问题描述】:
Either 从 Scala 2.12 开始是右偏的,这允许它在没有投影的情况下用于 for/yield 块,就像Option 一样。但显然,当与flatMap 一起使用时,这还不足以表现得像Option。
object Main {
def main(args: Array[String]): Unit = {
val nums = List.range(1,10)
println(nums.flatMap(evenOption))
println(nums.flatMap(evenEither)) // fails
}
def evenOption(x: Int): Option[Int] = if (x % 2 == 0) Some(x) else None
def evenEither(x: Int): Either[String, Int] = if (x % 2 == 0) Right(x) else Left("not even")
}
我的最小范畴理论知识让我认为Either 不是单子,因此这会失败吗?或者我怎样才能使上面的例子工作?
【问题讨论】:
-
这个问题可能与 Either 没有扩展 TraversableOnce 的事实有关?
标签: scala functional-programming