Der Code kommentiert wird, also lassen Sie uns einen Moment Zeit nehmen, das genießen:
/** If we can absolutely rule out a match we can fail early.
* This is the case if the scrutinee has no unresolved type arguments
* and is a "final type", meaning final + invariant in all type parameters.
*/
Beachten Sie, dass keine nicht endgültig ist, zum Beispiel. Ich weiß es schon gut?
Wenn Sie jemals scalac -Ypatmat-debug versuchen, den Kommentar hier helfen könnten:
https://github.com/scala/scala/pull/650
Erreichbarkeits ist fast in Reichweite:
https://issues.scala-lang.org/browse/SI-6146
Aber ich sehe nicht, irgendwelche Versprechen darüber, was eines Tages vielleicht warnen könnte. Aus Leistungsgründen? Man könnte auch sagen, warum sollte es vor einer Instanz von [Foo [_]] warnen?
Vorerst motivieren die Spec-Abschnitte 8.2 - 8.4, warum das Matching gegen Foo [a] interessant ist (wegen der Grenzen a erwirbt). Ich denke, ich werde das nochmal lesen. Nach etwas Kaffee.
trait Foo[+A]
final class Fuzz[+A] extends Foo[A]
final object Fooz extends Foo[Nothing]
object Futz extends Foo[Nothing]
//error
Fooz match {
case x: List[_] => println("A")
case _ => println("B")
}
//no error
Futz match { ... }
Sieht aus wie ein Fehler. Ich würde es melden. – sschaef