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
định nghĩa ==
, eql?
, và hash
cho bạn, vì vậy mà hai Aaa
s đều bình đẳng, nếu giá trị của họ cho a
và b
đều bình đẳng. Nó cũng định nghĩa initialize
để bạn có thể tùy chọn chuyển các giá trị cho a
và b
khi tạo đối tượng (Aaa.new(value_for_a, value_for_b)
). Và nó xác định to_a
để trả lại [a,b]
.
Bạn cũng có thể sử dụng Struct.new
với một khối để xác định phương pháp bổ sung, do đó bạn có toàn bộ sức mạnh của một lớp "bình thường":
Aaa = Struct.new(:a, :b) do
def c
a+b
end
end
Aaa.new(23,42).C#=> 65
Nhưng nếu tôi muốn làm điều này bằng các lớp khác thì sao? Hoặc nếu có 100 thuộc tính? – dfens
Trong phương pháp == (khác) của bạn, bạn có thể thực hiện self.instance_variables.each do | ivar | self.ivar == other.ivar end Bạn cũng có thể xem xét ===. –
đã làm việc cho tôi, cảm ơn – dfens