下面的代码不使用Ruby 1.9.2工作:这不是工作为什么这不适用于Ruby 1.9.2?
syntax error, unexpected tAMPER &block
发生了什么变化(自1.8.7):
def side_box(title, &block)
render :layout => 'layouts/side_box', :locals => {:title => title} do
&block
end
end
我得到一个错误?
下面的代码不使用Ruby 1.9.2工作:这不是工作为什么这不适用于Ruby 1.9.2?
syntax error, unexpected tAMPER &block
发生了什么变化(自1.8.7):
def side_box(title, &block)
render :layout => 'layouts/side_box', :locals => {:title => title} do
&block
end
end
我得到一个错误?
def side_box(title, &block)
render :layout => 'layouts/side_box', :locals => {:title => title} do
yield
end
end
或
def side_box(title, &block)
render :layout => 'layouts/side_box', :locals => {:title => title} do
block.call
end
end
它工作在红宝石1.9和1.8。
我不知道,这个工作在1.8.7中,正确的语法应为
block.call
或
block[]
或
render :layout => 'layouts/side_box', :locals => {:title => title}, &block
我不目前安装1.8.7,但我敢肯定,这在1.8.7中也是非法的。一元前缀&
运算符仅在参数列表和参数列表中是合法的。
大厦Simone的答案,如果你的块接受参数(ARG1,ARG2),正确的语法(在1.8和1.9)将
def side_box(title, &block)
render :layout => 'layouts/side_box', :locals => {:title => title} do
yield(arg1, arg2)
end
end
或
def side_box(title, &block)
render :layout => 'layouts/side_box', :locals => {:title => title} do
block.call(arg1, arg2)
end
end
如果你不在第二个选项中没有找到&block,那个选项应该是最快的 –