Я пытаюсь обновить приложение на Ruby 1.8 до 1.9 и преодолеть некоторые препятствия. В Ruby 1.8.7 я могу передать блок в Builder 3.0.0, и он вызывается, как и ожидалось:
1.8.7 :003 > @builder = Builder::XmlMarkup.new
1.8.7 :004 > block = lambda { puts "foo" }
1.8.7 :005 > @builder.tag(&block)
foo
Но в 1.9 я получаю эту ошибку:
1.9.3p0 :002 > @builder = Builder::XmlMarkup.new
1.9.3p0 :003 > block = lambda { puts "foo" }
1.9.3p0 :004 > @builder.content(&block)
ArgumentError: wrong number of arguments (1 for 0)
from (irb):3:in `block in irb_binding'
from /Users/dev/.bundle/ruby/1.9.1/gems/builder-3.0.0/lib/builder/xmlbase.rb:155:in `call'
...
И переписать это как «лямбда» (который просто синтаксический сахар, верно?) Не помогает
1.9.3p0 :006 > block = -> { puts "foo" }
1.9.3p0 :007 > @builder.content(&block)
ArgumentError: wrong number of arguments (1 for 0)
Передача фактического блока вместо ссылки на него работает:
1.9.3p0 :008 > @builder.content { puts "foo" }
foo
Помощь