Когда вопрос был задан, реализация OpenCascade
method_missing
создавала новый объект каждый раз, когда запрашивался Hash
:
def method_missing(sym, *args, &blk)
# ...snip..
if key?(name)
self[name] = transform_entry(self[name])
# ...snip...
end
end
private
#
def transform_entry(entry)
case entry
when Hash
OpenCascade.new(entry) #self.class.new(val)
when Array
entry.map{ |e| transform_entry(e) }
else
entry
end
end
Это означает, чтов этой версии следующее:
c.b equal? c.b
# => false
Вот почему насмешка c.b
не работала ...
С тех пор она была исправлена.