封印された特性とは何ですか? 質問する

封印された特性とは何ですか? 質問する

シールされたクラスは「Scala でのプログラミング」で説明されていますが、シールされた特性については説明されていません。シールされた特性に関する詳細情報はどこで入手できますか?

シールされた特性はシールされたクラスと同じかどうかを知りたいです。または、そうでない場合、違いは何ですか? シールされた特性を使用するのがよい場合 (および、そうでない場合) はいつですか?

ベストアンサー1

特性sealedは、その宣言と同じファイル内でのみ拡張できます。

これらは、 の代替を提供するためによく使用されますenums。これらは 1 つのファイル内でのみ拡張できるため、コンパイラはすべての可能なサブタイプを認識し、それについて推論できます。

たとえば、次の宣言の場合:

sealed trait Answer
case object Yes extends Answer
case object No extends Answer

一致が完全でない場合、コンパイラは警告を発します。

scala> val x: Answer = Yes
x: Answer = Yes

scala> x match {
     |   case No => println("No")
     | }
<console>:12: warning: match is not exhaustive!
missing combination            Yes

したがって、可能なサブタイプの数が有限で事前にわかっている場合は、シールされた特性(またはシールされた抽象クラス)を使用する必要があります。その他の例については、以下を参照してください。リストそしてオプション実装。

おすすめ記事