Scala 特质之间的差异?

Scala 特质之间的差异?,scala,Scala,这两种特质有什么区别吗 scala> trait Bar[A <: Foo] { | def bippy(x: A): A | } defined trait Bar scala>trait Bar[特征条]{ |A型在大多数实际情况下,没有区别,正如@AkosKrivachy所评论的,它们被安排为完全等效 通常可以将抽象类型成员转换为类的类型参数,反之亦然 它最后还指出 此外,在某些情况下,不可能用类型参数替换抽象类型 遗憾的是,我找不到关于这些案例的任

这两种特质有什么区别吗

scala> trait Bar[A <: Foo] {
     |    def bippy(x: A): A
     | }
defined trait Bar
scala>trait Bar[特征条]{

|A型在大多数实际情况下,没有区别,正如@AkosKrivachy所评论的,它们被安排为完全等效

通常可以将抽象类型成员转换为类的类型参数,反之亦然

它最后还指出

此外,在某些情况下,不可能用类型参数替换抽象类型

遗憾的是,我找不到关于这些案例的任何描述:-(


我将此作为一个答案发布,以防出现更好的答案,您可能希望结束此问题,但希望如此。

不要认为这是基于Martin Odersky的Scala Days talk:从
0:48:44
更简化的章节开始。Martin将在未来展示您的第一个示例将纯粹是句法上的糖分,它将被翻译成你的第二个例子。@AkosKrivachy“也许有一天他们不会不同”与“他们不会不同”@TravisBrown是的,我的措辞可能并不完美,这就是为什么我没有把它作为一个答案发布,只是作为一点额外的信息。与此同时,我使用
scala-print
运行了两个示例,它们生成了相同的代码,不确定这是否意味着什么。我真的不理解这个问题。有很多特征之间的差异,例如名称。在这里,以何种方式确定类型相等?毕竟,类型上没有
equals
scala> trait BarTwo {
     |   type A <: Foo
     |
     |   def bippy(x: A): A
     | }
defined trait BarTwo