加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala特征混合秩序和超级呼叫

发布时间:2020-12-16 19:16:08 所属栏目:安全 来源:网络整理
导读:我有这个代码: 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{ overr
我有这个代码:

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")
  }
}

如果我调用(新测试).msg,这会打印出如下内容:base,foo,done

但是,如果我将基本特征更改为:

trait base{
  def msg: Unit
}

它打印出的东西如:base 2,done

我理解with的顺序是从右到左(最后一个是第一个)但是如何延伸?为什么有时会打印base2,但有时会打印?

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读