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
definiert ==
, eql?
und hash
für Sie, so dass zwei Aaa
s gleich sind, wenn ihre Werte für a
und b
gleich sind. Es definiert auch initialize
, so dass Sie optional die Werte für a
und b
beim Erstellen des Objekts (Aaa.new(value_for_a, value_for_b)
) übergeben können. Und es definiert to_a
, um [a,b]
zurückzugeben.
Sie können auch Struct.new
mit einem Block verwenden, um zusätzliche Methoden zu definieren, so dass Sie die volle Leistung einer „normalen“ Klasse haben:
Aaa = Struct.new(:a, :b) do
def c
a+b
end
end
Aaa.new(23,42).C#=> 65
Aber was, wenn ich das mit anderen Klassen machen möchte? Oder wenn es 100 Attribute gibt? – dfens
In Ihrer == (anderen) Methode könnten Sie self.instance_variables.each do | ivar | self.ivar == other.ivar end Vielleicht möchten Sie auch === sehen. –
hat für mich funktioniert, danke – dfens