我有一个像这样的 Ruby 代码的 DSL:
Activity.new('20-06-2012') do
Eat.log do |l|
l.duration = 0.30
l.priority = 5
end
Work.log do |l|
l.duration = 2
l.priority = 3
end
end
每次调用 log() 方法时,都会实例化一个 Log 对象(在幕后),并将 block 传递给方法( block 传递给 Log 对象的构造函数)。我的问题是,有没有办法收集 log() 方法的所有返回值?在上面的示例中,最外层 block 的返回值是对 log() 的最后一次调用。但我想将所有调用的结果放在一个数组中,而不仅仅是最后一个。
谢谢!
最佳答案
您的内部 DSL 仍然太像 Ruby,您可以将其重构为如下所示:
activity '20-06-2012' do
log :eat do
duration 0.30
priority 5
end
log :work do
duration 2
priority 3
end
end
现在捕获 instance_eval
中的调用并将值累积到内部数组中,这是通常的 DSL 内容。
关于ruby - 从 Ruby block 中的一系列调用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124491/