作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我在 Scala 中有如下代码:
trait A {
var yo = 10
def get = yo
}
trait B extends A { /* makes use of A.get */ }
trait C extends A { /* makes use of A.get */ }
trait D extends B with C { /* makes use of A.get */ }
class E extends D { /* makes use of A.get */ }
编译器将如何解决依赖关系?换句话说,它是否理解从两个不同的特征 B 和 C 继承的特征 D 和对象 E 的 A 特征相关部分必须被视为一个单一的事物,而不是在每个继承案例中重复?无论如何,在那种情况下,编译器的想法会是什么样的?
最佳答案
来自 this按照tenshi的建议,在Scala编程一章中,我们有以下示例:
class Animal
trait Furry extends Animal
trait HasLegs extends Animal
trait FourLegged extends HasLegs
class Cat extends Animal with Furry with FourLegged
它派生到以下管道:
Cat -> FourLegged -> HasLegs -> Furry -> Animal
所以右边的人有优先权,但他的祖先,只要他们不是管道上其他人的共同祖先,也有优先权。这就是 HasLegs
出现在 Furry
之前的原因。
最后,这是您的特定示例的答案:
E -> D -> C -> B -> A
关于class - Scala——共同特质的二代传承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392528/
我是一名优秀的程序员,十分优秀!