Ich habe eine Wrapper-Klasse um einige Objekte, die ich als Schlüssel in einem Hash verwenden möchte. Die eingepackten und nicht verpackten Objekte sollten demselben Schlüssel zugeordnet sein.Welchen Gleichheitstest verwendet Ruby's Hash beim Vergleich von Schlüsseln?
wird ein einfaches Beispiel sein:
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
Ich habe ==, === versucht, eq? und Hash alles vergebens.
Sie könnten in 'SimpleDelegator' suchen möchten, wenn Sie die meisten Methoden' @ inner' delegieren möchten. –
Danke @ Marc-AndréLafortune! Habe heute etwas Neues gelernt – alexloh