这两种使用ruby块的方法有什么区别?

这是我最后一个问题 。

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

 

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

第一个版本:

 

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

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

 

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

每次获取一个项目并输出(因为您正在评估块内的输出)。 不使用each方法的实际返回值。

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

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

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