为什么Scala 2.10在匹配单例类型时会给出“匹配可能不是详尽无援”的警告?

时间:2012-06-23 01:32:04

标签: scala singleton pattern-matching scala-2.10 non-exhaustive-patterns

在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

这可能是一个错误。)

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)