Tôi có một lớp bao bọc xung quanh một số đối tượng mà tôi muốn sử dụng làm khóa trong Hash. Các đối tượng bọc và unwrapper nên ánh xạ tới cùng một khóa.Kiểm tra bình đẳng nào mà Hash của Ruby sử dụng khi so sánh các khóa?
Một ví dụ đơn giản sẽ là thế này:
class A
attr_reader :x
def initialize(inner)
@inner=inner
end
def x; @inner.x; end
def ==(other)
@inner.x==other.x
end
end
a = A.new(o) #o is just any object that allows o.x
b = A.new(o)
h = {a=>5}
p h[a] #5
p h[b] #nil, should be 5
p h[o] #nil, should be 5
Tôi đã thử ==, ===, eq? và băm tất cả để không có kết quả.
Bạn có thể muốn nhìn vào 'SimpleDelegator', nếu bạn muốn giao phó hầu hết các phương pháp để '@ inner'. –
Cảm ơn @ Marc-AndréLafortune! Đã học một cái gì đó mới ngày hôm nay – alexloh