OpenCascade是来自Hashery的递归OpenStruct:
http://rubyworks.github.com/hashery/
它允许您通过一系列键引用散列中的嵌套值:
h = {:a=>1,:b=>{:x=>1,:y=>2}}
c = OpenCascade.new(h)
c.b.y
=> 2
我们使用它来读取YAML配置。但是,现在我们想模拟测试中的值
mock(c.b).y { 5 }
不起作用。我们如何模拟它呢?
发布于 2014-03-01 02:28:13
当提出这个问题时,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
不起作用..。
自那以后,它被修复了。
https://stackoverflow.com/questions/7248645
复制相似问题