我敢打赌,有一些时髦的方法可以通过新的反射库和/或repl电源模式在repl中显示线性化.这些是什么?
在我的特定情况下,我试图理解ArrayBuffer实例的线性化.
(我正在尝试创建一个类似于Buffer和IndexedSeqOptimized的类,我发现编译器抱怨重写方法seq具有不兼容的类型)
scala规范第5.1.2节中描述了scala类的线性化规则.据我了解,方法覆盖按线性化顺序进行,初始化按反向线性化顺序进行.
在这个简化的实验中,我希望能够快速构建一个具有可堆叠特征的类,该类可以报告用于构建它的特征.这让我想起了装饰器模式,但我更喜欢在编译时而不是在运行时实现它.
冗余代码的工作示例
class TraitTest {
def report(d: Int) : Unit = {
println(s"At depth $d, we've reached the end of our recursion")
}
}
trait Moo extends TraitTest {
private def sound = "Moo"
override def report(d: Int) : Unit = {
println(s"At depth $d, I make the sound '$sound'")
super.report(d+1)
}
}
trait Quack extends TraitTest {
private def sound = "Quack"
override def report(d: Int) : Unit = {
println(s"At depth $d, I make the sound '$sound'")
super.report(d+1) …Run Code Online (Sandbox Code Playgroud)