为什么存在`ScalaObject`?

soc*_*soc 11 java inheritance programming-languages scala language-design

为什么所有Scala类都继承自ScalaObject尽管该特征是完全空的并且没有(可见?)功能相比AnyRef,它确实定义了其他方法?

不会减慢方法调用,equals()或者hashCode()因为它需要考虑另一个类(可能会覆盖方法)?

是不是可以将AnyRef和ScalaObject折叠成一个类?

更新: ScalaObject 使用新的2.10版Scala 进行了根除.

Fre*_*Foo 11

ScalaObject插入一个$tag方法,根据2.7库源代码中的注释,"需要"优化与案例类的构造函数匹配的模式匹配表达式." 由于名称的开头$,它当然应该被视为应用程序员"隐藏".在Scala 2.8中,它完全是空的,所以我猜它是为了向后兼容.


Ran*_*ulz 7

方法调度不会将类继承结构链接起来寻找实现.编译器为每个类构造一个net方法调度表,以反映其net覆盖/继承方法沿袭.这是静态解决所有打字的优点之一.