我是Scala的新手,正在探索Scala源代码以获得具体的理解。当我参考scala.AnyRef
类来理解eq
方法的实现时,我可以看到下面的定义,这令人困惑:
final def eq(that: AnyRef): Boolean = sys.error("eq")
由于此方法会引发错误:eq
如何以及遵循什么逻辑来检查两个对象是否相同?我们在哪里可以看到这种实现?
同样的问题适用于hashCode()
方法。
为什么Any.scala
和AnyRef.scala
不是 Scala 软件包的一部分?我只能看到AnyValues.scala
.
这个实现并没有真正使用;它是一个存根。编译器用自己的逻辑替换对此方法的调用。因此,实际的实现深埋在编译器中。
出于同样的原因,Any.scala
和AnyRef.scala
也没有物质存在。它们被编译器神奇地具体化。
一般来说,你无法从基元类型的源代码中获得太多知识(其他例子:Int
、Nothing
等)。