Первая версия:
<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