可能重复:
Ruby block and unparenthesized arguments
What is the difference or value of these block coding styles in Ruby?
我一直认为以下只是两种说法相同的方式:
[1,2,3].collect{|i| i * 2}
[1,2,3].collect do |i|
i * 2
end
但是我在我的一个ERB模板中得到了一些奇怪的行为,其中两个语法似乎做了两件不同的事情。这段代码效果很好:
<%=raw @menu.collect { |m|
content_tag("li") {
link_to(m.capitalize, url_for(:controller => m))
}
} %>
但是当我把它改写为:
<%=raw @menu.collect do |m|
content_tag("li") do
link_to(m.capitalize, url_for(:controller => m))
end
end %>
...我最终得到了一系列@menu项目的串联字符串。我错过了什么吗?是否有一些细小的语法糖妨碍了这里?
答案 0 :(得分:0)
我会使用您的第一种方法或将此代码放在视图助手中。但如果我确实想要使用块,我可能会做这样的事情。
<% @menu.collect do |m| %>
<%= content_tag("li") do %>
<% link_to(m.capitalize, url_for(:controller => m)) %>
<% end %>
<% end %>