web-dev-qa-db-fra.com

Scala scellé vs classe abstraite de Scala

Quelle est la différence entre sealed abstract et abstract Scala classe?

67
Łukasz Lew

La différence est que toutes les sous-classes d'une classe scellée (qu'elles soient abstraites ou non) doivent être dans le même fichier que la classe scellée.

81
sepp2k

Comme répond , toutes héritant directement des sous-classes d'une classe scellée (abstraite ou non) doivent être dans le même fichier. Une conséquence pratique de ceci est que le compilateur peut avertir si la correspondance de modèle est incomplète. Par exemple:

sealed abstract class Tree
case class Node(left: Tree, right: Tree) extends Tree
case class Leaf[T](value: T) extends Tree
case object Empty extends Tree

def dps(t: Tree): Unit = t match {
  case Node(left, right) => dps(left); dps(right)
  case Leaf(x) => println("Leaf "+x)
  // case Empty => println("Empty") // Compiler warns here
}

Si Tree est sealed, le compilateur avertit à moins que cette dernière ligne ne soit pas mise en commentaire.

75
Daniel C. Sobral