首页 > 解决方案 > Ruby 可枚举块变量赋值

问题描述

鉴于此 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_dateprogram_name_and_completion

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

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

  1. Ruby 完全有可能吗?
  2. 如果是这样,正确的语法是什么?

标签: ruby-on-railsrubydestructuringenumerable

解决方案


您可以提取内联参数,如下所示:

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


推荐阅读