Either
是正確的偏向斯卡拉2.12,它允許它在沒有投影的情況下用於for/yield塊,就像Option
一樣。但顯然這與flatMap
一起使用時的行爲不如Option
。在Scala中使用flatMap列表[任一]
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
不是一個單子,所以這個不成?或者我怎麼能讓上面的例子工作?
該問題可能與以下事實有關:或者不擴展TraversableOnce? – Mikel