Ruby如何直接将数组元素传递给变量?

时间:2014-02-22 17:12:04

标签: ruby

在:

controller_name, action = "page", "action"

右边的每个对象都分配给左边的变量。

在此代码中:

controller_name, action = "page/action".split("/")

结果是一样的。可能这是一个愚蠢的问题,但我想知道Ruby是如何做到的?

1 个答案:

答案 0 :(得分:2)

"page/action".split("/")在Ruby中创建数组

然后controller_name, action = "page/action".split("/")它会导致并行分配,通过 splatting String#split方法创建的数组。

以下是Ruby本身为您处理/采取的所有中间步骤:

controller_name, action = "page/action".split("/")
             ↓
controller_name, action = ['page','action'] # <- intermediate
             ↓
controller_name, action = *['page','action'] # <- intermediate
             ↓
controller_name, action = 'page','action' # final assignment happened now.

阅读Parallel Assignment

  

您可以使用Ruby的并行分配运算符 折叠展开数组。如果最后一个左值前面带有星号,则将收集所有剩余的右值并将其作为数组分配给该左值。类似地,如果最后一个rvalue是一个数组,你可以在它前面添加一个星号,它可以有效地将其扩展为其组成值。 (如果rvalue是右侧唯一的东西,则不需要这样做 - 数组将自动扩展。)