在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
这可能是一个错误。)
答案 0 :(得分:5)
可悲的是,有两个值存在X.type
。一个是显而易见的,X
,另一个当然是null
。因此,你的模式错过了一个案例:(
答案 1 :(得分:2)