7

假设我有以下代码:

val either: Either[String, (Int, Int)] = Right((1,2))
for {
  (a, b) <- either.right
} yield a + b

当我在 REPL 中评估它时,我得到

:13: 错误:构造函数无法实例化为预期类型;找到:(T1,T2)需要:scala.util.Either[Nothing,(Double,Double)](a,b)<-a.right ^:14:错误:未找到:值a}产生a + b ^

为什么我有这样的错误?我不能对来自 Either's Right 的元组进行模式匹配吗?

4

1 回答 1

7

问题似乎是一个 scala 错误https://issues.scala-lang.org/browse/SI-7222。将 for 理解转换为 flatMap/map 符号似乎可行。

val either: Either[String, (Int, Int)] = Right((1, 2))
either.right.map {
  case (a, b) =>
    a + b
}

either: Either[String,(Int, Int)] = Right((1,2))
res0: Serializable with Product with scala.util.Either[String,Int] = Right(3)
于 2014-06-05T17:51:28.513 回答