73

sealed abstractabstractScalaクラスの違いは何ですか?

4

2 に答える 2

92

違いは、封印されたクラスのすべてのサブクラス(抽象的であるかどうかに関係なく)は、封印されたクラスと同じファイルになければならないということです。

于 2010-06-13T15:34:16.170 に答える
78

答えられたように、封印されたクラスのすべての直接継承するサブクラス(抽象またはそうでない)は同じファイルになければなりません。これの実際的な結果は、パターン一致が不完全な場合にコンパイラが警告できることです。例えば:

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最後の行のコメントが解除されない限り、コンパイラは警告を発します。

于 2010-06-13T19:33:14.587 に答える