Gibt es eine bessere Erklärung als "so funktioniert es". Ich meine, ich versuchte, diese ein:Warum kann ich den Mustervergleich nicht auf nicht fallbezogene Klassen anwenden?
class TestShortMatch[T <: AnyRef] {
def foo(t: T): Unit = {
val f = (_: Any) match {
case Val(t) => println(t)
case Sup(l) => println(l)
}
}
class Val(t: T)
class Sup(l: Number)
}
und Compiler Beschwerden:
Cannot resolve symbol 'Val'
Cannot resolve symbol 'Sup'
Natürlich, wenn ich case
vor jedem der Klassen hinzufügen, wird es funktionieren. Aber was ist der Grund? Führt der Compiler eine Optimierung durch und erzeugt einen spezifischen Byte-Code?
Die kanonische Referenz ist Kapitel 24 der Programmierung in Scala. Das Buch ist in seiner 3. Ausgabe, so dass die erste ed online ist http://www.artima.com/pins1ed/extractors.html –