是否有可能通过继承在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希望添加的代码解释了问题。 –