【发布时间】:2013-03-16 21:58:01
【问题描述】:
Reading the Scala by Example book,当 Martin 在第 54 页解释类型边界时,有这个例子:
trait Set[A <: Ordered[A]] {
def incl(x: A): Set[A]
def contains(x: A): Boolean
}
和
trait Set[A <% Ordered[A]] ...
在第 55 页进一步。他还说
是 trait Set 所需的唯一更改,以展示类型边界的可能性。但是,当我用自己的代码重复该示例时,IDE 会抱怨特征可能没有视图边界,只有类型边界。将 trait 关键字更改为抽象类或将视图绑定更改为类型绑定会有所帮助。这是书中的错误吗?
【问题讨论】:
-
在编写“Scala by Example”之后,规范发生了变化。见this discussion
-
感谢您的指出!但是我认为实现的复杂性影响语言是不好的。没有逻辑解释为什么特征可能没有上限。
-
特征可以有上限。它们不能有上下文和视图边界,因为它们是构造函数参数,而特征不能有构造函数参数。
-
谢谢你,Daniel,是的,这些结构似乎只是语法糖,解释在于真正的底层语言语法。但是,我现在很好奇,您能否解释一下或指出一个来源,该来源解释说,以前怎么支持此功能?在 Scala 成熟之前,还计划/可能进行多少这样的更改?
-
@noncom:就其价值而言,我倾向于同意。但是,如果唯一的解决方案(根据我链接的线程)涉及编译器神奇地向所有实现该特征的类添加构造函数,那么当进一步继承发生时,我会警惕微妙的极端情况(类似于过去发生的情况)类继承)。