我正在阅读Scala编程.它说:
您可以
==通过重写equals方法来重新定义新类型的行为,该方法始终从类继承Any.equals除非被覆盖,否则生成的继承是对象标识,就像Java中的情况一样.所以equals(和它一起==)默认情况下是相同的eq,但你可以通过覆盖equals你定义的类中的方法来改变它的行为.不可能==直接覆盖,因为它被定义为类中的最终方法Any.也就是说,Scala==在课堂上将其视为如下定义Any:Run Code Online (Sandbox Code Playgroud)final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
但这并不是我在scala 2.9.1中看到的内容,它看起来像:
== 似乎没有默认 equals==直接覆盖(没有编译器的抱怨,override不需要).所以在我看来似乎要么:
我做错了 - 这个Rational给出的定义
% scala
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).
Type in expressions to have …Run Code Online (Sandbox Code Playgroud)