Trait之间的区别是什么?

4
这两个trait有什么区别吗?
scala> trait Bar[A <: Foo] {
     |    def bippy(x: A): A
     | }
defined trait Bar

并且

scala> trait BarTwo {
     |   type A <: Foo
     |
     |   def bippy(x: A): A
     | }
defined trait BarTwo
编辑:
根据我的问题,它们名称的差异并没有实际意义。我在寻找这两个trait结构之间的任何区别。

1
不要认为这是基于Martin Odersky的Scala Days演讲的。https://www.parleys.com/tutorial/scala-where-came-from-where-its-going 从0:48:44更多简化章节开始。在那里,Martin展示了在未来,你的第一个例子将纯粹是语法糖,并且它将被转换为你的第二个例子。 - Akos Krivachy
2
@AkosKrivachy的“有一天也许它们不会不同”与“它们不是不同”的意思不同。 - Travis Brown
@TravisBrown 是的,我的措辞可能不够完美,这也是我没有将其发布为答案,只是作为额外信息。同时,我使用 scala -print 运行了两个示例,它们生成的代码相同,不确定这是否表示了什么。 - Akos Krivachy
我真的不太理解这个问题。特征之间有很多差异,例如名称。在这里,您将以哪种方式确定类型相等?毕竟,类型上没有“equals”。 - Madoc
1个回答

1
在大多数实际情况下,它们没有区别,正如@AkosKrivachy所评论的那样,它们计划被完全等效。尽管官方文档指出:

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

它还在结尾处指出:

此外,存在一些不能用类型参数替换抽象类型的情况。

可悲的是,我找不到对这些情况的描述:-(
我发表这个答案是为了防止更好的答案无法出现并且你想关闭此问题,但让我们希望。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接