是否有可能通過繼承在Scala中構建不可變列表?我有一個創建MenuBar的基礎特徵。 MenuBar將有標準的標題:文件,編輯,視圖/窗口,幫助等。我希望繼承特性能夠添加子項到菜單標題。我希望菜單動態創建,所以會有一個函數列表,當打開菜單創建子樹時會調用它。由於函數列表在編譯時已知,如果它可能是不可變的列表,它將會很好。構建不可變列表雖然繼承
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 {}
但不能沒有拋出一個空的異常被初始化。讓val list懶惰也無濟於事,因此0__解決方案的必要性。
您能否提供一個示例代碼(僞代碼)來顯示您想實現的目標? –
@PetrPudlák希望添加的代碼解釋了問題。 –