Scala Language Tratti sigillati che corrispondono al modello


Esempio

Quando pattern corrisponde a un oggetto il cui tipo è un tratto sigillato, Scala verificherà in fase di compilazione che tutti i casi siano "esaustivamente abbinati":

sealed trait Shape
case class Square(height: Int, width: Int) extends Shape
case class Circle(radius: Int) extends Shape
case object Point extends Shape


def matchShape(shape: Shape): String = shape match {
    case Square(height, width) => "It's a square"
    case Circle(radius)        => "It's a circle"
    //no case for Point because it would cause a compiler warning.
}

Se in seguito viene aggiunta una nuova case class per Shape , tutte le istruzioni di match su Shape inizieranno a generare un avviso del compilatore. Ciò facilita il completo refactoring: il compilatore avviserà lo sviluppatore di tutto il codice che deve essere aggiornato.