Estoy leyendo a través de la Programación en Scala. Dice:Scala: ¿== default es igual a?
Puede volver a definir el comportamiento de
==
para los nuevos tipos reemplazando el métodoequals
, que siempre se hereda de la claseAny
. Elequals
heredado, que tiene vigencia a menos que se invalide, es la identidad del objeto, como es el caso de Java. Por lo tanto,equals
(y con ella,==
) es por defecto el mismo queeq
, pero puede cambiar su comportamiento anulando el métodoequals
en las clases que defina. No es posible anular==
directamente, ya que se define como un método final en la claseAny
. Es decir, Scala trata==
como si se define de la siguiente en la claseAny
:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
Pero esto no se trasluchadas con lo que estoy viendo en Scala 2.9.1, donde parece que:
==
no parece que por defecto aequals
- puedo anular
==
directamente (sin denuncia por parte del compilador, sinoverride
es necesario).
Por lo tanto, me parece bien:
que estoy haciendo mal - this definition of
Rational
da% 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 them evaluated. Type :help for more information. scala> Rational(1) == Rational(1) res0: Boolean = false scala> Rational(1) equals Rational(1) res1: Boolean = true
o estoy leyendo una versión desactualizada de la libro, y las cosas han cambiado.
¿Qué está pasando?
impresionante. Esto me muerde cada vez que regreso a JVM. Lo aprenderé tarde o temprano. ¿Hay alguna forma de que pueda soltar el 'a match' y simplemente asignar' equals' a una función anónima? 'override def equals: Any => Boolean = {case r: Rational/* ... * /}' no funciona ... – rampion
@rampion - No, debe coincidir exactamente con la firma del tipo. 'equals: Any => Boolean' significa que devuelve una función (es decir, una instancia de una clase' Function1 [Any, Boolean] '). Aunque esto es conceptualmente equivalente en cierto sentido, no es exactamente el mismo método, por lo que no funcionará. –