gpt4 book ai didi

Scala 不可变地注册 mixin 构造函数结果

转载 作者:行者123 更新时间:2023-12-02 23:33:05 27 4
gpt4 key购买 nike

我想以编程方式将 mixin 中发送的值绑定(bind)到实例,我想知道是否有一种更不可变的方法可以使用隐藏的可变对象来执行此操作。我主要想将其用于注册表。我当前的方法在构建后并不是严格不可变的,有什么建议吗?

trait Numbers {
lazy val values = holding
private var holding = Set.empty[Int]
protected def includes(i:Int) {
holding += i
}
}

trait Odd extends Numbers{
includes(1)
includes(3)
includes(5)
includes(7)
includes(9)
}

trait Even extends Numbers {
includes(2)
includes(4)
includes(6)
includes(8)
}

这给出了我想要的结果

val n = new Odd with Even
println(n.values)

Set(5, 1, 6, 9, 2, 7, 3, 8, 4)

最佳答案

方法重写怎么样?然后您可以在特征线性化中引用“ super ”对象,

trait Numbers {
def holding = Vector[Int]()
lazy val values = holding
}

trait Odd extends Numbers {
override def holding = super.holding ++ Vector(1,3,5)
}

trait Even extends Numbers {
override def holding = super.holding ++ Vector(0,2,4)
}

(new Odd with Even).values // Vector(1, 3, 5, 0, 2, 4)
(new Even with Odd).values // Vector(0, 2, 4, 1, 3, 5)

关于Scala 不可变地注册 mixin 构造函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14710633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com