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

时间:2012-12-30 18:44:32

标签: ruby

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

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

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

1 个答案:

答案 0 :(得分:4)

您可以在多个赋值中最多拥有一个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]

....