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
==
определяет, eql?
и hash
для вас, так что два Aaa
s равны, если их значения для a
и b
равны. Он также определяет initialize
, так что вы можете при желании передать значения для a
и b
при создании объекта (Aaa.new(value_for_a, value_for_b)
). И он определяет to_a
для возврата [a,b]
.
Вы также можете использовать Struct.new
с блоком для определения дополнительных методов, поэтому у вас есть все возможности «нормального» класса:
Aaa = Struct.new(:a, :b) do
def c
a+b
end
end
Aaa.new(23,42).C#=> 65
Но что, если я хочу сделать это, используя другие классы? Или, если есть 100 атрибутов? – dfens
В вашем == (другом) методе вы можете сделать self.instance_variables.each do | ivar | self.ivar == other.ivar end Возможно, вы захотите посмотреть на ===. –
работал для меня, спасибо – dfens