我始终认为以下两种方式只是表达同一件事情的两种方式:
但是当我将其改写为:
可能是重复问题:
Ruby块和未加括号的参数
这些块编码风格在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项。我是否错过了什么?这里是否有一些微小的语法糖阻碍了我?
each
works with brackets but not withdo
-end
(ruby)、Block definition - difference between braces anddo
-end
?、Ruby multiline block withoutdo
end
、Usingdo
block vs brackets{}
、What is the difference or value of these block coding styles in Ruby? 的副本。 - Jörg W Mittag