为什么不/ do和{}总是等价?
可能重复:
Ruby块和不带括号的参数
Ruby中这些块编码样式的区别或价值是什么?
我一直认为以下只是两种说法相同的方式:
[1,2,3].collect{|i| i * 2} [1,2,3].collect do |i| i * 2 end
但是我在我的一个ERB模板中得到了一些奇怪的行为,其中两个语法似乎做了两件不同的事情。 这段代码效果很好:
m)) } } %>
但是当我重写它时:
m)) end end %>
…我最终得到了一串连结的@menu项目。 我错过了什么吗? 这里有一些细小的语法糖吗?
我会使用您的第一种方法或将此代码放在视图助手中。 但如果我确实想要使用块,我可能会做这样的事情。
<% @menu.collect do |m| %> <%= content_tag("li") do %> <% link_to(m.capitalize, url_for(:controller => m)) %> <% end %> <% end %>