Ruby 多重赋值中的左侧和右侧

Ruby 多重赋值中的左侧和右侧,ruby,Ruby,我很难理解ruby doc中的这两个部分: 当它表示左侧时,splat操作符位于右侧,当它表示右侧时,操作符位于左侧。例如: *可以出现在右侧的任何位置: *a, b = 1, 2, 3 p a: a, b: b # prints {:a=>[1, 2], :b=>3} 有人能解释一下这些章节中左手边和右手边的含义吗?在我看来,示例似乎相互矛盾。*将参数列表转换为数组,反之亦然: def do_it(*args) args end do_it(1, 'hello')

我很难理解ruby doc中的这两个部分:

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

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

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

有人能解释一下这些章节中左手边和右手边的含义吗?在我看来,示例似乎相互矛盾。

*
将参数列表转换为数组,反之亦然:

def do_it(*args)
  args
end

do_it(1, 'hello') # => [1, 'hello']
*a,b=1,2,3
的情况下,它从右向左处理,
b
被分配
3
,其余参数
2
3
作为数组
a
[2,3]

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


为什么
a=1,2,3
是有效的,并且不会导致错误,我不知道。我猜,当您为单个var赋值提供多个参数时,Ruby会执行隐式splat。所以
a=[1,2,3]
在功能上与
a=1,2,3
是一样的,我想这应该是你所想的。但是,该文档似乎有错误。您可以将此作为文档错误报告给开发人员。

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


在v2.2.0手册(和)中,这两个问题都已解决。

您的问题是什么?@sawa,左手边和右手边在这里是什么意思?问题不在于splat或多重分配如何工作。问题是文档中使用的术语“左手边”和“右手边”应该是什么意思。谢谢,我认为第二个术语也是完全固定的,我的示例从
修改为*可以出现在右手边的任何地方:
可以出现在左手边的任何地方:
@Ashkan right,我一定是看错了。已编辑。这是一个旧版本的Ruby。实际上,它已经在当前版本中修复。