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
равны, если их значения для 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