AnyRef.eq 方法的默认实现



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

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

由于此方法会引发错误:eq如何以及遵循什么逻辑来检查两个对象是否相同?我们在哪里可以看到这种实现?

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

为什么Any.scalaAnyRef.scala不是 Scala 软件包的一部分?我只能看到AnyValues.scala.

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

出于同样的原因,Any.scalaAnyRef.scala也没有物质存在。它们被编译器神奇地具体化。

一般来说,你无法从基元类型的源代码中获得太多知识(其他例子:IntNothing等)。

最新更新