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_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.

最新更新