在一个语句中为一个多个对象分配一个值

时间:2013-01-19 01:50:20

标签: ruby

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

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

但现在我想在一行上完成所有工作,比如

a1, a2, a3 = []

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

7 个答案:

答案 0 :(得分:18)

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

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

答案 1 :(得分:5)

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

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

另一种方式是:

a1 = (a2 = (a3 = []).dup).dup

答案 2 :(得分:4)

As Andrew Marshall pointed out,还有另一种更简单的为多个对象分配一个值的方法

a1, a2, a3 = [42] * 3

答案 3 :(得分:3)

Ruby在以下情况下,多次分配是意外的:

a1, a2, a3 = []

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

使用,

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

您需要提供多个值作为变量数用于初始化。

答案 4 :(得分:3)

这些答案过于设计,侧重于在OP样本中误导使用Array

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

测试结果

a1
# => []
a2
# => []
a3
# => []
a4 # for sake of comparison
NameError: undefined local variable or method `a4' for main:Object

答案 5 :(得分:0)

您还可以执行以下操作:

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

答案 6 :(得分:0)

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

a,b = b,nil

这一个班轮的要点是将'a'设置为'b'的值并重置'b'。