ruby splat运算符在多次赋值期间如何获取数组的第一个和其余部分?

在ruby中,可以将多个赋值与splat运算符组合,以便模拟函数语言中的第一个和rest(或头部和尾部)。

first, *rest = [1,2,3,4] first # output: 1 rest # output: [2,3,4] 

splat运营商如何实现这一目标?

在多个赋值中,最多只能有一个splat运算符,splat运算符将调整数组的长度,使其与右侧的数据完全匹配。 换一种说法:

1)当左侧的变量数量大于右侧数组的长度时,带有splat的变量将被赋予一个空数组:

 *a = [] # => a == [] *a, b = [1] # => a == [], b == 1 a, *b = [1] # => a == 1, b == [] *a, b, c = [1, 2] # => a == [], b == 1, c == 2 a, *b, c = [1, 2] # => a == 1, b == [], c == 2 a, b, *c = [1, 2] # => a == 1, b == 2, c == [] ... 

2)否则,带有splat的变量将扩展为从右侧填充其余元素:

 *a = [1, 2] # => a == [1, 2] *a, b = [1, 2, 3] # => a == [1, 2], b == 3 a, *b = [1, 2, 3] # => a == 1, b == [2, 3] *a, b, c = [1, 2, 3, 4] # => a == [1, 2], b == 3, c == 4 a, *b, c = [1, 2, 3, 4] # => a == 1, b == [2, 3], c == 4 a, b, *c = [1, 2, 3, 4] # => a == 1, b == 2, c == [3, 4] ....