Ruby присваивание перечисляемым блочным переменным - PullRequest
1 голос
/ 24 января 2020

Учитывая этот код ERB

<% @client.sessionables.ordered.by_program_completion.reverse_each do | program_name_and_completion, sessionables | %>
  <% program_name, program_completion_date = program_name_and_completion %>

  <% # Render stuff... %>
<% end %>

Я хотел бы избавиться от второй строки, где я использую множественные переменные для извлечения program_name и program_completion_date из массива program_name_and_completion. Можно предположить, что это может быть сделано непосредственно в назначении блока, например,

sessionables.by_program_completion.each do | [program_name, program_completion_date], sessionables |

, но приведенный выше фрагмент не работает, поэтому мои вопросы:

  1. Это вообще возможно с Ruby?
  2. Если так, какой правильный синтаксис?

1 Ответ

2 голосов
/ 24 января 2020

Вы можете извлечь встроенные аргументы следующим образом:

<% @client.sessionables.ordered.by_program_completion.reverse_each do |(program_name, program_completion_date), sessionables| %>

Или написать то же самое, используя менее подробный синтаксис (чтобы было легче увидеть, что происходит !!):

[[[1, 2], 3]].each { |(a, b), c| ... }

Внутри блока мы получаем: a == 1, b == 2, c == 3.

...