В чем разница между этими двумя способами использования рубиновых блоков? - PullRequest
1 голос
/ 02 марта 2011

Этот вопрос добавлен к моему последнему .

Проблема в моем последнем вопросе была решена путем изменения следующего кода:

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

на

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

Но я до сих пор не знаю разницы между стилем с одной линией, разделенным стилями {} и 3, с помощью тега do и end

1 Ответ

3 голосов
/ 02 марта 2011

Первая версия:

<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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...