Ruby并行分配简介

时间:2018-11-18 15:45:42

标签: ruby-on-rails ruby expression

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'互相抵消呢?

1 个答案:

答案 0 :(得分:4)

在两种情况下,右侧的99, *a都会扩展为数组[99, 1, 2, 3, 4]

b,  c = 99, *a

bc成为数组的前两个值,其余的数组均被丢弃。

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]