(irb) a, b = 5
a => 5
b => nil
这不应该反过来吗?这里实际上发生了什么?
(irb) a, b = 5
a => 5
b => nil
当我写这篇文章时,我的同事发现了原因:
Ruby将a, b = 5
视为a, b = 5, nil
在Python3中,会抛出TypeError
。
var a, b = 5
就是两个单独的赋值语句,这会让你感到惊讶。在 Ruby 中,列表赋值更像是 (a, b) = (5, nil)
的展开形式。左侧 被视为一个列表。当出现 a, b = 5, c = 3
时,情况变得更加混乱,结果是 a = 5, b = 3, c = 3
。 - tadmana, b = 5, c = 3
看作是 a, b = *[5, c = 3]
,那么它就不会那么令人困惑了。 - Chris Healdb
分配一个值,您需要给它第二个值。a, b = 5, 6
a = 5
b = 6
b
赋值为nil
。这是一个重要的 Ruby 特性,称为多重赋值。
多重赋值可以从表达式或数组中执行多个赋值。这是一种快速同时赋值多个变量的方法。
如果您声明了三个变量,但只给其中两个赋值,则第三个变量将默认接收 nil
。
此文档 的多重赋值部分解释了该特性以及几个示例。
a,b = 5
被解释为a,b = *[5]
。 - Chris Healda = b = 5
。 - Gumbo