Я читаю Программирование на Scala. В нем говорится:
Вы можете переопределить поведение
==
для новых типов, переопределив методequals
, который всегда наследуется от классаAny
. Унаследованноеequals
, которое вступает в силу, если оно не переопределено, является идентификатором объекта, как в случае с Java. Таким образом,equals
(и с ним==
) по умолчанию совпадает сeq
, но вы можете изменить его поведение, переопределивequals
в определяемых вами классах. Невозможно переопределить==
напрямую, так как он определен как окончательный метод в классеAny
. То есть Scala обрабатывает==
, как если бы он был определен следующим образом в классеAny
:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (это равно тому)
Но это не совпадает с тем, что я вижу в scala 2.9.1, где кажется, что
==
по умолчанию не равно равно
==
напрямую (без претензий со стороны компилятора, переопределить
не требуется).Так что мне кажется либо:
Я делаю это неправильно - это определение Rational
дает
% scala
Добро пожаловать в Scala версии 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).Введите выражения для их оценки.
Введите :help для получения дополнительной информации.
scala> Рациональный(1) == Рациональный(1)
res0: логическое значение = ложь
scala> Rational(1) равно Rational(1)
res1: логическое значение = истина
или я читаю устаревшую версию книги, и все изменилось.
Что происходит?