在类的主体中,我想将一个块传递给一个名为with
的方法在块的生命周期中,我希望有一个with_value
方法可用。
否则,块内的所有内容都应表现为块外。
下面是一个例子:
class C
extend M
with "some value" do
do_something_complicated
do_something_complicated
do_something_complicated
end
end
我们几乎可以通过:
module M
def with(str, &block)
Object.new.tap do |wrapper|
wrapper.define_singleton_method :with_value do # Here's our with_value
str # method.
end
end.instance_eval &block
end
def do_something_complicated # Push a value onto an
(@foo ||= []).push with_value # array.
end
end
但有一个问题:由于我们正在评估传递给另一个对象上下文中的
with
的块,do_something_complicated
不可用。什么才是正确的方法?
最佳答案
这将使with_value
仅在块内可用但是,_with_value
将在块内或块外定义。
module M
def _with_value
...
end
def with(str, &block)
alias with_value _with_value
block.call
undef with_value
end
...
end
我无法从这个问题中看出这是否是个问题如果这是一个问题,你需要进一步描述你想做什么。
关于ruby - 如何制作在块的整个生命周期内都可以使用的Ruby方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23295622/