Aaa = Struct.new(:a, :b)
x = Aaa.new
x.a, x.b = 1,2
y = Aaa.new
y.a, y.b = 1,2
x == y #=> true
Struct
define ==
, eql?
y hash
para usted, por lo que dos Aaa
s son iguales, si sus valores para a
y b
son iguales. También define initialize
para que, opcionalmente, pueda ingresar los valores de a
y b
al crear el objeto (Aaa.new(value_for_a, value_for_b)
). Y define to_a
para devolver [a,b]
.
También puede utilizar Struct.new
con un bloque para definir métodos adicionales, por lo que tiene todo el poder de una clase "normal":
Aaa = Struct.new(:a, :b) do
def c
a+b
end
end
Aaa.new(23,42).C#=> 65
¿Pero y si quiero hacer esto usando otras clases? O si hay 100 atributos? – dfens
En su método == (other), podría hacer self.instance_variables.each do | ivar | auto.ivar == other.ivar end Es posible que también desee ver ===. –
funcionó para mí, gracias – dfens