gpt4 book ai didi

Scala 特征混合顺序和 super 调用

转载 作者:行者123 更新时间:2023-12-04 12:47:24 24 4
gpt4 key购买 nike

我有这个代码:

trait base{
def msg: Unit= {
println{"base"}
}
}

trait foo extends base {
abstract override def msg: Unit ={
super.msg
println("foo")
}
}

class base2{
def msg:Unit = {
println{"base 2"}
}
}

class test extends base2 with foo{
override def msg: Unit ={
super.msg
println("done")
}
}

如果我打电话 (new test).msg ,这会打印出如下内容: base, foo, done
但是,如果我将基本特征更改为:
trait base{
def msg: Unit
}

它打印出如下内容: base 2, foo, done
我明白了 with的顺序从右到左(最后一个在前)但是如何 extends ?为什么有时会打印 base2 ,但有时 base ?

最佳答案

省略实现时,base是特征的模板,具有不同的评估规则。见 Scala specification

关于Scala 特征混合顺序和 super 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569901/

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