左侧和右侧分配多个

时间:2015-06-25 13:31:31

标签: ruby

我无法理解ruby-doc中的这两个部分:

当它表示左侧时,splat操作员位于右侧,当它表示右侧时,操作员位于左侧。例如:

  

*可以出现在右侧的任何位置:

*a, b = 1, 2, 3
p a: a, b: b # prints {:a=>[1, 2], :b=>3}

任何人都能解释一下这些部分中左手侧和右手侧的含义是什么吗?对我来说,例子似乎是矛盾的。

3 个答案:

答案 0 :(得分:2)

我认为这是v2.0.0参考手册中的一个错误。你的理解是正确的。

两者都已在v2.2.0手册(Implicit Array AssignmentMultiple 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,其余参数23被分配到{{ 1}}作为数组,a

对于[2, 3],数组a = 1, *[2,3]将转换为参数[2, 3]。因此相当于2, 3

为什么a = 1, 2, 3有效并且不会导致我不知道的错误。我猜想,当你为一个var赋值提供多个参数时,Ruby会做一个隐式的splat。因此,a = 1, 2, 3a = [1, 2, 3]功能相同。