Ruby可枚举的块变量赋值

问题描述 投票:1回答:1

给出此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-rails ruby destructuring enumerable
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.