Scalaでの継承を通じて不変リストを作成することは可能ですか?MenuBarを作成する基本特性があります。MenuBarには、標準のヘッダー(File、Edit、View / Window、Helpなど)があります。継承する特性を使用して、メニュー見出しにサブアイテムを追加できるようにします。メニューを動的に作成したいので、メニューを開いてサブツリーを作成するときに呼び出される関数のリストがあります。関数のリストはコンパイル時にわかるので、不変のリストであると便利です。
Scalaにコンストラクター/初期化階層を介して不変のリストを作成する方法はありますか?Scalaにない場合、この機能を提供している言語はありますか?
可変リストを使用した簡単な例で問題を説明します。TrAとTrBは、互いに独立して記述されています。
trait Base
{
val list = scala.collection.mutable.LinkedList[String]()
}
trait TrA extends Base
{
list += "A"
}
trait TrB extends Base
{
list += "B"
}
val ab = new TrA with TrB {}
リストの内容はコンパイル時にわかっているので、とにかくそれをval不変リストにすることはできますか?もちろん、任意の可変コレクションは、def呼び出しを介して不変コレクションとして公開できます。
以下がコンパイルされます。
trait Base
{ val list: List[String] = Nil }
trait TrA extends Base
{ val list = "A" :: super.list }
trait TrB extends Base
{ val list = "B" :: super.list }
val ab = new TrA with TrB {}
ただし、null例外をスローせずに初期化することはできません。valリストを怠惰にすることも役に立たないので、0__の解決策が必要です。