Sé que el método ==
en Scala tiene la misma semántica del método equals en Java. Sin embargo, me gustaría entender cuando se aplica a instancias de estructuras recursivas. Por ejemplo, considere un montón de expresiones:Método Scala y == en los tipos recursivos definidos
abstract class Exp
abstract class BinaryExp(l:Exp, r:Exp) extends Exp
case class Plus(l:Exp, r:Exp) extends BinaryExp(l,r)
case class Minus(l:Exp, r:Exp) extends BinaryExp(l,r)
case class Mult(l:Exp, r:Exp) extends BinaryExp(l,r)
case class Div(l:Exp, r:Exp) extends BinaryExp(l,r)
case class Num(v:Int) extends Exp
Entonces, cuando tengo dos instancias de un BinaryExp
, dicen obj1
y obj2
, hace obj1 == obj2
resultado en una prueba de igualdad profunda (recursivo)? Es decir, ¿está garantizado que si se cumple obj1 == obj2
, entonces obj1
y obj2
representan los mismos árboles de expresión exacta?
Tenga en cuenta que en todas las clases, confío en la implementación predeterminada de ==
(no se reemplaza en ninguna parte).