65 votes

Scala's abstract abstract

Quelle est la différence entre Scala abstract abstract et abstract Scala class?

84voto

sepp2k Points 157757

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 fichier que la classe scellée.

76voto

Daniel C. Sobral Points 159554

Comme il a été répondu , toutes les sous-classes héritant directement d’une classe scellée (abstraite ou non) doivent figurer dans le même fichier. Une conséquence pratique de cela 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 commentée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X