在:
controller_name, action = "page", "action"
右边的每个对象都分配给左边的变量。
在此代码中:
controller_name, action = "page/action".split("/")
结果是一样的。可能这是一个愚蠢的问题,但我想知道Ruby是如何做到的?
答案 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.
您可以使用Ruby的并行分配运算符 折叠和展开数组。如果最后一个左值前面带有星号,则将收集所有剩余的右值并将其作为数组分配给该左值。类似地,如果最后一个rvalue是一个数组,你可以在它前面添加一个星号,它可以有效地将其扩展为其组成值。 (如果rvalue是右侧唯一的东西,则不需要这样做 - 数组将自动扩展。)