AnyRef.eq方法的默认实现

Moh*_*ram 3 scala

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

final def eq(that: AnyRef): Boolean = sys.error("eq")
Run Code Online (Sandbox Code Playgroud)

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

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

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

sjr*_*jrd 7

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

Any.scala并且AnyRef.scala出于同样的原因没有物理存在.它们由编译器神奇地实现.

一般情况下,你无法从原始类型的源代码获得多少知识(其他例子:Int,Nothing,等).