Запечатанный абстрактный Scala против абстрактного класса - PullRequest
63 голосов
/ 13 июня 2010

В чем разница между sealed abstract и abstract классом Scala?

Ответы [ 2 ]

81 голосов
/ 13 июня 2010

Разница в том, что все подклассы запечатанного класса (будь то абстрактный или нет) должны находиться в том же файле, что и запечатанный класс.

75 голосов
/ 13 июня 2010

Когда ответил , все , непосредственно наследующие подклассы запечатанного класса (абстрактного или нет), должны находиться в одном файле. Практическим следствием этого является то, что компилятор может предупредить, если сопоставление с образцом является неполным. Например:

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
}

Если Tree равно sealed, то компилятор предупреждает, если последняя строка не закомментирована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...