Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何模拟OpenCascade?_Ruby_Rspec - Fatal编程技术网

Ruby 如何模拟OpenCascade?

Ruby 如何模拟OpenCascade?,ruby,rspec,Ruby,Rspec,OpenCascade是Hashery的递归OpenStruct: 它允许您通过一系列键引用散列中的嵌套值: h = {:a=>1,:b=>{:x=>1,:y=>2}} c = OpenCascade.new(h) c.b.y => 2 我们用它来读取YAML配置。然而,现在我们想模拟测试中的值 mock(c.b).y { 5 } 不起作用。我们如何模拟它?当问到这个问题时,OpenCascade的实现在每次查询散列时都会创建一个新对象: def method

OpenCascade是Hashery的递归OpenStruct:

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

h = {:a=>1,:b=>{:x=>1,:y=>2}}
c = OpenCascade.new(h)
c.b.y
=> 2
我们用它来读取YAML配置。然而,现在我们想模拟测试中的值

mock(c.b).y { 5 }

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

当问到这个问题时,
OpenCascade
的实现在每次查询
散列时都会创建一个新对象:

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不起作用的原因


它已经被修复。

OpenCascade是一个出色的类。我一直在寻找它来存储应用程序设置。谢谢