違いは何ですか sealed abstract
およびabstract
Scala class?
違いは、封印されたクラスのすべてのサブクラス(抽象かどうかに関係なく)は、封印されたクラスと同じファイルになければならないことです。
回答済み と同様に、封印されたクラス(抽象かどうかにかかわらず)のすべての直接継承サブクラスは同じファイル内にある必要があります。これの実際的な結果は、パターンマッチが不完全な場合にコンパイラが警告する可能性があることです。例えば:
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
の場合、その最後の行がコメント化されていない限り、コンパイラーは警告を出します。