我无法理解ruby-doc中的这两个部分:
当它表示左侧时,splat操作员位于右侧,当它表示右侧时,操作员位于左侧。例如:
*
可以出现在右侧的任何位置:*a, b = 1, 2, 3 p a: a, b: b # prints {:a=>[1, 2], :b=>3}
任何人都能解释一下这些部分中左手侧和右手侧的含义是什么吗?对我来说,例子似乎是矛盾的。
答案 0 :(得分:2)
我认为这是v2.0.0参考手册中的一个错误。你的理解是正确的。
两者都已在v2.2.0手册(Implicit Array Assignment和Multiple Assignment)中修复。
答案 1 :(得分:1)
我认为它应该意味着你的想法。但是,该文档看起来有错误。您可以将此报告给开发人员here作为文档错误。
答案 2 :(得分:-1)
*
会将参数列表转换为数组,反之亦然:
def do_it(*args)
args
end
do_it(1, 'hello') # => [1, 'hello']
如果*a, b = 1, 2, 3
从右到左处理,b
被分配3
,其余参数2
和3
被分配到{{ 1}}作为数组,a
。
对于[2, 3]
,数组a = 1, *[2,3]
将转换为参数[2, 3]
。因此相当于2, 3
。
为什么a = 1, 2, 3
有效并且不会导致我不知道的错误。我猜想,当你为一个var赋值提供多个参数时,Ruby会做一个隐式的splat。因此,a = 1, 2, 3
与a = [1, 2, 3]
功能相同。