2

Scala2.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>)

これは正しいです?確かに、試合は実際には徹底的です。

(その間、Scala2.9.Xに戻ると

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

これはおそらくバグでした。)

4

2 に答える 2

5

悲しいことに、に生息する2つの値がありますX.type。1つは明らかなものでXあり、もう1つはもちろんですnull。したがって、あなたのパターンはケースを見逃しています:(

于 2012-06-23T02:03:07.240 に答える
2

そして、パッチが適用されています。https://github.com/retronym/scala/compare/ticket/5968を参照してください。

于 2012-06-24T04:03:48.880 に答える