【发布时间】:2011-11-30 02:03:13
【问题描述】:
我正在尝试将 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'
...
将其重写为 stabby lambda(这只是语法糖,对吗?)并没有帮助:
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
帮助?
【问题讨论】:
标签: ruby lambda builder ruby-1.9 argument-error