如果我想声明三个新数组(a1
,a2
,a3
),我可以这样做:
a1=[]
a2=[]
a3=[]
但现在我想在一行上完成所有工作,比如
a1, a2, a3 = []
但这失败了。如何将它们全部分配到一行中的空数组?
答案 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'。