Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
Im „Case-Klassen“ haben wir das Pattern-Matching mit unserer Shapes-Hierarchie demonstriert und dabei Case-Klassen verwendet. Dabei gab es den Default-Ausdruck case _ => .... Im Allgemeinen ist es klug, einen solchen zu haben: Andernfalls wird der Laufzeitfehler scala.MatchError ausgelöst, sobald jemand einen neuen Subtyp zu Shape definiert und dieser match-Anweisung übergibt, denn die neue Form wird mit keiner der Formen übereinstimmen, die durch die Match-Anweisung abgedeckt sind. Allerdings ist es nicht immer möglich, ein sinnvolles Verhalten für den Default-Fall zu definieren.
Wenn Sie wissen, dass eine Änderung in der Hierarchie der Case-Klassen unwahrscheinlich ist, und wenn es möglich ist, die ganze Hierarchie in einer einzigen Datei zu definieren, gibt es eine Alternative: Sie können das Schlüsselwort sealed (versiegelt) vor die Deklaration der gemeinsamen Basisklasse setzen. Wenn eine Klasse versiegelt ist, kenn der Compiler alle möglichen Klassen, die in dem match-Ausdruck erscheinen können, denn alle müssen in derselben Quelldatei definiert sein. Daher können Sie, wenn Sie alle diese Klassen durch case-Ausdrücke (egal ob explizit oder über eine gemeinsame Elternklassen) abdecken, den Default-Fall problemlos weglassen.