AnyRef.eq方法的默认实现

时间:2016-02-03 17:23:34

标签: scala

我是Scala的新手,并探索Scala源代码以获得具体的理解。当我引用scala.AnyRef类来理解eq方法的实现时,我可以看到以下定义并且令人困惑:

final def eq(that: AnyRef): Boolean = sys.error("eq")

由于此方法会抛出错误:检查两个对象是否相同,逻辑eq如何以及如何?我们在哪里可以看到实施?

同样的问题适用于hashCode()方法。

为什么Any.scalaAnyRef.scala不属于Scala包?我只能看到AnyValues.scala

1 个答案:

答案 0 :(得分:7)

这个实现并没有真正使用;这是一个存根。编译器通过自己的逻辑替换对此方法的调用。因此,实际的实现深埋在编译器中。

由于同样的原因,

Any.scalaAnyRef.scala没有物理存在。它们被编译器神奇地实现了。

一般而言,您无法从原始类型的源代码中获得太多知识(其他示例:IntNothing等。)

相关问题