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_name
和 program_completion_date
。人们会假设它可以直接在块赋值中完成,例如
sessionables.by_program_completion.each do | [program_name, program_completion_date], sessionables |
但是上面的代码片段不起作用,所以我的问题是:
- Ruby 完全可以做到这一点吗?
- 如果是这样,正确的语法是什么?
您可以按如下方式提取内联参数:
<% @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
。
鉴于此 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_name
和 program_completion_date
。人们会假设它可以直接在块赋值中完成,例如
sessionables.by_program_completion.each do | [program_name, program_completion_date], sessionables |
但是上面的代码片段不起作用,所以我的问题是:
- Ruby 完全可以做到这一点吗?
- 如果是这样,正确的语法是什么?
您可以按如下方式提取内联参数:
<% @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
。