Scala 两次遗传一个特征

Scala 两次遗传一个特征,scala,inheritance,linearization,Scala,Inheritance,Linearization,这不起作用: trait Trait class Class extends Trait with Trait 编译器抱怨: <console>:8: error: trait Trait is inherited twice class Class extends Trait with Trait ^ <console>:8: error: trait Trait is inherited twice

这不起作用:

trait Trait
class Class extends Trait with Trait
编译器抱怨:

<console>:8: error: trait Trait is inherited twice
       class Class extends Trait with Trait
                           ^
<console>:8: error: trait Trait is inherited twice
       class Class extends Trait with Trait
                                      ^
问题:

  • 它为什么有效
  • 第二个片段有什么不同?(关于双重继承问题)
  • 第二个片段或模式是否有用

第二个片段之所以有效,是因为特质线性化。编译器将把特征组织成一个线性列表,这样
Trait
只出现一次。我认为线性化是正确的

Implementation, Trait, Abstraction, ScalaObject, AnyRef, Any
请参阅Scala编程中的详细说明

这样做主要是为了对菱形继承问题有一个一致的方法,在这种情况下很有用


由于
Trait
在线性化后不能出现两次,因此用Trait编写
Trait是没有意义的,被禁止也是有意义的。

您是否有一个实际例子,说明第一个不起作用是一个真正的问题?问题的目的不是找出第一个不起作用的原因,但为什么第二个会这样。有用的链接:显示线性化是如何工作的。答案非常古老,所以scala可能改变了这种行为,但对我来说,现在看来这是错误的。线性化应该是:实现、抽象、特征。。。
Implementation, Trait, Abstraction, ScalaObject, AnyRef, Any