У меня есть 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(). Но я хочу получить результаты всех вызовов в массиве, а не только в последнем.
Спасибо!
Таким образом, мне пришлось бы превратить методы класса в методы экземпляра и использовать 'instance_eval' - я собирался сделать это как более поздний шаг, но теперь могу это сделать. Благодаря! – abbottjam
@ пользователь906230: точно. Если целью были Ruby-программисты, было бы неплохо иметь блоки с аргументами, 'new' и т. Д., Но не программистам будет сложно это понять. – tokland
+1 для точно модификации DSL, которую я собирался предложить :) – Phrogz