2011-09-08 80 views
0

下面的代码不使用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 

我得到一个错误?

回答

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 

它工作在红宝石1.9和1.8。

0

我不知道,这个工作在1.8.7中,正确的语法应为

block.call 

block[] 

render :layout => 'layouts/side_box', :locals => {:title => title}, &block 
2

我不目前安装1.8.7,但我敢肯定,这在1.8.7中也是非法的。一元前缀&运算符仅在参数列表和参数列表中是合法的。

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 
+0

如果你不在第二个选项中没有找到&block,那个选项应该是最快的 –

相关问题