Ich frage mich, ob der Compiler zur Kompilierungszeit für diesen bestimmten Patternmatch nicht weiß, welche möglichen Implementierungen dieses Merkmals / dieser Klasse verfügbar sind, wenn ich ein nicht versiegeltes trait
oder abstract class
in Scala verwendetes Muster verwende und dann den Mustervergleich verwende. Wenn dies der Fall ist, könnte es dann keine Warnungen vor Musterübereinstimmungen geben, obwohl das trait
/ abstract class
nicht versiegelt ist, weil er weiß, welche Typen verwendet werden könnten , indem alle möglichen Abhängigkeiten / Importe überprüft werden?
Wenn ich zB ein habe Option[A]
und nur einen Mustervergleich für, Some[A]
aber nicht für mache, None
beschwert sich der Compiler, weil er Option
versiegelt ist.
Wenn der Compiler das nicht wissen / lösen kann, warum kann er es dann nicht? Und wenn der Compiler dies (theoretisch) kann, was sind die Gründe dafür, dass er in Scala nicht verwendet wird? Gibt es andere Sprachen, die dieses Verhalten unterstützen?
Foo
mit Unterklassen A
, B
und C
, und alle Ihre Musterübereinstimmungen stimmen nur mit diesen drei überein. Nichts hindert mich daran, eine neue Unterklasse hinzuzufügen D
, die Ihre Musterübereinstimmungen in die Luft jagt.
java.lang.ClassLoader
.