Ruby 可枚举块变量赋值

Posted

技术标签:

【中文标题】Ruby 可枚举块变量赋值【英文标题】:Ruby enumerable block variable assignment 【发布时间】:2020-05-11 00:21:18 【问题描述】:

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

但上面的 sn-p 不起作用,所以我的问题是:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于Ruby 可枚举块变量赋值的主要内容,如果未能解决你的问题,请参考以下文章

C# 静态类如何赋值,LINQ有关。

Go基础指针地址间接赋值

条件“if”修饰符中的 Ruby 变量赋值

C 语言指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )

使用静态代码块实现赋值静态成员变量

使用静态代码块实现赋值静态成员变量