Ruby 可枚举块变量赋值

Ruby enumerable block variable assignment

鉴于此 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_and_completion 数组中提取 program_nameprogram_completion_date。人们会假设它可以直接在块赋值中完成,例如

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

但是上面的代码片段不起作用,所以我的问题是:

  1. Ruby 完全可以做到这一点吗?
  2. 如果是这样,正确的语法是什么?

您可以按如下方式提取内联参数:

<% @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