¿Qué prueba de igualdad utiliza el hash de Ruby al comparar claves?

Tengo una clase de envoltorio alrededor de algunos objetos que quiero usar como claves en un Hash. Los objetos envueltos y desenvueltos deben asignarse a la misma clave.

Un ejemplo simple será este:

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

He intentado ==, ===, eq? y hash todo en vano.

Respuestas a la pregunta(2)

Su respuesta a la pregunta