以下代码不适用于Ruby 1.9.2:
def side_box(title, &block)
render :layout => 'layouts/side_box', :locals => {:title => title} do
&block
end
end
我收到错误:
语法错误,意外的tAMPER &安培;块
为了不起作用,发生了什么变化(自1.8.7起)?
答案 0 :(得分:3)
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
适用于Ruby 1.9和1.8。
答案 1 :(得分:2)
我目前没有安装1.8.7,但我很确定这在1.8.7中也是非法的。一元前缀&
运算符仅在参数列表和参数列表中合法。
答案 2 :(得分:1)
在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
答案 3 :(得分:0)
我不知道,这在1.8.7中有效,正确的语法应该是
block.call
或
block[]
或
render :layout => 'layouts/side_box', :locals => {:title => title}, &block