Scala: == по умолчанию равно?

Я читаю Программирование на 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: логическое значение = истина
    
  • или я читаю устаревшую версию книги, и все изменилось.

Что происходит?

7
задан rampion 24 March 2012 в 17:04
поделиться