Scala est scellé abstrait vs classe abstraite

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

62
demandé sur Michal Kordas 2010-06-13 19:30:47

2 réponses

la différence est que toutes les sous-classes d'une classe scellée (qu'elle soit abstraite ou non) doivent être dans le même dossier que la classe scellée.

79
répondu sepp2k 2010-06-13 15:34:16

Comme répondu , tous les directement hériter sous-classes d'une classe scellée (abstraite ou non) doivent être dans le même fichier. Une conséquence pratique de cette est que le compilateur peut avertir si la correspondance de modèle est incomplet. 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 le Tree est sealed , alors le compilateur avertit à moins que cette dernière ligne ne soit décommentée.

75
répondu Daniel C. Sobral 2017-05-23 12:02:40