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