a = [1, 2, 3, 4]
b, c = 99, *a → b == 99, c == 1
b, *c = 99, *a → b == 99, c == [1, 2, 3, 4]
有人可以彻底解释一下为什么在Ruby中,星号会使代码返回其返回的内容吗?我了解,如果左值有一个星号,则它将右值分配给该左值。但是,为什么'* a'使'c'只返回数组中的'1'值,为什么'* a'和'* c'互相抵消呢?
答案 0 :(得分:4)
在两种情况下,右侧的99, *a
都会扩展为数组[99, 1, 2, 3, 4]
在
b, c = 99, *a
b
和c
成为数组的前两个值,其余的数组均被丢弃。
在
b, *c = 99, *a
b
成为数组中的第一个值,而c
则分配了其余的值(由于左侧的splat)。
右侧的99, *a
是一个示例,其中数组的方括号在分配中是可选的。
一个简单的例子:
a = 1, 2, 3 → a == [1, 2, 3]
或更简单的示例版本:
example = [99, *a] → example == [99, 1, 2, 3, 4]