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
definisce ==
, eql?
e hash
per te, in modo che due Aaa
s sono uguali, se il loro valore per a
e b
sono uguali. Definisce inoltre initialize
in modo che sia possibile passare facoltativamente i valori per a
e b
durante la creazione dell'oggetto (Aaa.new(value_for_a, value_for_b)
). E definisce to_a
per restituire [a,b]
.
È inoltre possibile utilizzare Struct.new
con un blocco per definire metodi aggiuntivi, in modo da avere tutta la potenza di una classe "normale":
Aaa = Struct.new(:a, :b) do
def c
a+b
end
end
Aaa.new(23,42).C#=> 65
Ma cosa succede se voglio farlo usando altre classi? O se ci sono 100 attributi? – dfens
Nel tuo == (altro) metodo, potresti fare self.instance_variables.each do | ivar | self.ivar == other.ivar end Si potrebbe anche voler guardare ===. –
ha funzionato per me, grazie – dfens