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
definiuje ==
, eql?
i hash
dla ciebie, tak, że dwa Aaa
y są równe, jeśli ich wartości a
i b
są równe. Definiuje również initialize
, dzięki czemu można opcjonalnie przekazać wartości a
i b
podczas tworzenia obiektu (Aaa.new(value_for_a, value_for_b)
). I definiuje to_a
, aby zwrócić [a,b]
.
Można również użyć Struct.new
z bloku do określenia dodatkowych metod, więc masz pełną moc „normalnej” klasy:
Aaa = Struct.new(:a, :b) do
def c
a+b
end
end
Aaa.new(23,42).C#=> 65
Ale co, jeśli chcę to zrobić na innych zajęciach? A może 100 atrybutów? – dfens
W swojej == (innej) metodzie, można zrobić self.instance_variables.each do | ivar | self.ivar == other.ivar koniec Możesz również spojrzeć na ===. –
pracował dla mnie, dziękuję – dfens