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