Ho una classe wrapper attorno ad alcuni oggetti che voglio usare come chiavi in un hash. Gli oggetti wrapper e unwrapper devono essere associati alla stessa chiave.Quale test di uguaglianza utilizza Ruby's Hash quando si confrontano le chiavi?
Un semplice esempio sarà questo:
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
Ho provato ==, ===, eq? e hash tutto inutilmente.
Si potrebbe voler esaminare 'SimpleDelegator', se si desidera delegare la maggior parte dei metodi per' @ inner'. –
Grazie @ Marc-AndréLafortune! Ho imparato qualcosa di nuovo oggi – alexloh