首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何模拟OpenCascade?

如何模拟OpenCascade?
EN

Stack Overflow用户
提问于 2011-08-31 03:23:46
回答 1查看 233关注 0票数 3

OpenCascade是来自Hashery的递归OpenStruct:

http://rubyworks.github.com/hashery/

它允许您通过一系列键引用散列中的嵌套值:

代码语言:javascript
运行
复制
h = {:a=>1,:b=>{:x=>1,:y=>2}}
c = OpenCascade.new(h)
c.b.y
=> 2

我们使用它来读取YAML配置。但是,现在我们想模拟测试中的值

代码语言:javascript
运行
复制
mock(c.b).y { 5 }

不起作用。我们如何模拟它呢?

EN

回答 1

Stack Overflow用户

发布于 2014-03-01 02:28:13

当提出这个问题时,OpenCascademethod_missing的实现在每次查询Hash时都会创建一个新对象:

代码语言:javascript
运行
复制
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

这意味着在该版本中,以下内容:

代码语言:javascript
运行
复制
c.b equal? c.b
# => false

这就是为什么嘲笑c.b不起作用..。

自那以后,它被修复了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7248645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档