为什么不做/ end和{}总是等价?

Mat*_*ski 6 ruby ruby-on-rails

可能重复:
Ruby块和不带括号的参数Ruby
中这些块编码样式的区别或价值是什么?

我一直认为以下只是两种说法相同的方式:

[1,2,3].collect{|i| i * 2}

[1,2,3].collect do |i|
  i * 2
end
Run Code Online (Sandbox Code Playgroud)

但是我在我的一个ERB模板中得到了一些奇怪的行为,其中两个语法似乎做了两件不同的事情.这段代码效果很好:

<%=raw @menu.collect { |m| 
    content_tag("li") {
        link_to(m.capitalize, url_for(:controller => m))
    } 
} %>
Run Code Online (Sandbox Code Playgroud)

但当我重写它时:

<%=raw @menu.collect do |m| 
    content_tag("li") do
        link_to(m.capitalize, url_for(:controller => m))
    end 
end %>
Run Code Online (Sandbox Code Playgroud)

...我最终得到了一串连结的@menu项目.我错过了什么吗?这里有一些细小的语法糖吗?

jsp*_*ner 0

我会使用您的第一种方法或将此代码放在视图助手中。但如果我确实想使用块,我可能会这样做。

<% @menu.collect do |m| %>
   <%= content_tag("li") do %>
        <% link_to(m.capitalize, url_for(:controller => m)) %>
   <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

869 次

最近记录:

14 年,2 月 前