2

在 Scala 2.10.0-M4 中

object X
def f(e: Either[Int, X.type]) = e match {
  case Left(i) => i
  case Right(X) => 0
}

给出:

warning: match may not be exhaustive.
It would fail on the following input: Right(<not X>)

这个对吗?当然,比赛实际上是详尽无遗的。

(同时,回到 Scala 2.9.X 我们得到

error: pattern type is incompatible with expected type;
 found   : object X
 required: X.type
           case Right(X) => 0

这大概是一个错误。)

4

2 回答 2

5

可悲的是,存在两种价值观X.type。一个是显而易见X的,另一个当然是null。因此,您的模式错过了一个案例:(

于 2012-06-23T02:03:07.240 回答
2

它已被修补,参见https://github.com/retronym/scala/compare/ticket/5968

于 2012-06-24T04:03:48.880 回答