ruby元编程 - yield块无法动态添加方法
-
05-07-2019 - |
题
我正在努力为rspec中的存根方法扩展 NotAMock 框架,以及让存根屈服于方法块。
此Gist中的代码在我编写代码时效果很好在我自己(这完全类似于NotAMock存根方法)。
但是当我将object.instance_eval ...代码合并到NotAMock框架中时,“block_given?”总是返回错误,因此我永远无法让我的收益工作。正确添加了该方法,我可以调用stubbed方法......但它不能识别我从NotAMock存根版本传递给该方法的块。
要了解我如何将此代码合并到NotAMock框架中,请转到 my克隆NotAMock 并查看“add_hook”私有方法中的方法。
我知道这有点问...我希望找到一些指导。它一直让我疯狂。
解决方案 2
事实证明这个问题与我链接到的代码无关...... NotAMock框架正在做一些导致我的问题的额外方法重新定义。我已经将问题缩小到一个特定的代码行,并且正在研究如何解决它。
其他提示
我甚至不确定这是可能的。 New Procs甚至不识别块。
proc = Proc.new do
if block_given?
yield
else
puts "Not in a block"
end
end
proc.call { puts "In a block"} # => puts Not in a block
Ruby 1.9应该允许块作为参数获取和阻止。但我不知道这是否有效,或者即使它允许条件块。
不隶属于 StackOverflow