6

如果我想声明三个新数组(a1, a2, a3),我可以这样做:

a1=[]
a2=[]
a3=[]

但现在我想在一条线上完成这一切,比如

a1, a2, a3 = []

但这失败了。如何将它们全部分配给一行上的空数组?

4

7 回答 7

19

要执行与第二个示例类似的操作,您仍然需要创建三个数组:

a1, a2, a3 = [], [], []
于 2013-01-19T01:52:01.350 回答
5

如果您坚持不重复[]文字,那么一种方法是:

a1, a2, a3 = Array.new(3){[]}

另一种方法是:

a1 = (a2 = (a3 = []).dup).dup
于 2013-01-19T02:02:11.987 回答
4

正如 Andrew Marshall 所指出的,还有另一种更短的方法可以将一个值分配给多个对象

a1, a2, a3 = [42] * 3
于 2015-10-16T18:34:53.647 回答
3

在以下情况下,Ruby 多重赋值是意外的:

a1, a2, a3 = []

上面的代码不会在任何数组变量中分配空白数组。

采用,

a1, a2, a3 = [], [], []

您需要提供值的数量,因为变量的数量用于初始化。

于 2013-01-19T07:19:33.473 回答
3

这些答案被过度设计,专注于ArrayOP 样本中的误导性使用。

a1 = a2 = a3 = []
# => []

测试结果

a1
# => []
a2
# => []
a3
# => []
a4 # for sake of comparison
NameError: undefined local variable or method `a4' for main:Object
于 2016-04-29T21:01:13.130 回答
0

您还可以执行以下操作:

a1=[]; a2=[]; a3=[]
于 2015-02-15T18:39:42.790 回答
0

以下代码段在所有 ruby​​ 虚拟机上的行为是否相同?

a,b = b,nil

这一行的重点是将“a”设置为“b”中的值并重置“b”。

于 2015-03-29T13:04:57.340 回答