这两种使用红宝石块的方法有什么区别?

时间:2011-03-02 05:49:27

标签: ruby-on-rails

这个问题已添加到我的last one

通过更改以下代码解决了我上一个问题中的问题:

<p><%= each(2,16,3){|x| x } %></p>

<p>
<% each(2,16,3) do |x| %>
<%= x %>
<% end %>
<p>

但我仍然不知道使用do和end标签分隔{}和3行样式的一行样式之间的区别

1 个答案:

答案 0 :(得分:3)

第一个版本:

<p><%= each(2,16,3){|x| x } %></p>

获取整个each方法调用的返回值并尝试输出它。第二个版本:

<p>
  <% each(2,16,3) do |x| %>
    <%= x %>
  <% end %>
<p>

一次采用一个一个并输出它(因为您正在评估块中的输出)。不使用each方法的实际返回值。

正如其他人所提到的,这只在你需要在块中进行某种输出/计算时才重要,每个值yield都可以用于块;其余的只是语义。以下是相同的:

evens = (0..10).to_a.delete_if { |value| value.odd? }

evens = (0..10).to_a.delete_if do |value|
  value.odd?
end