如果我想声明三个新数组(a1
, a2
, a3
),我可以这样做:
a1=[]
a2=[]
a3=[]
但现在我想在一条线上完成这一切,比如
a1, a2, a3 = []
但这失败了。如何将它们全部分配给一行上的空数组?
如果我想声明三个新数组(a1
, a2
, a3
),我可以这样做:
a1=[]
a2=[]
a3=[]
但现在我想在一条线上完成这一切,比如
a1, a2, a3 = []
但这失败了。如何将它们全部分配给一行上的空数组?
要执行与第二个示例类似的操作,您仍然需要创建三个数组:
a1, a2, a3 = [], [], []
如果您坚持不重复[]
文字,那么一种方法是:
a1, a2, a3 = Array.new(3){[]}
另一种方法是:
a1 = (a2 = (a3 = []).dup).dup
正如 Andrew Marshall 所指出的,还有另一种更短的方法可以将一个值分配给多个对象。
a1, a2, a3 = [42] * 3
在以下情况下,Ruby 多重赋值是意外的:
a1, a2, a3 = []
上面的代码不会在任何数组变量中分配空白数组。
采用,
a1, a2, a3 = [], [], []
您需要提供值的数量,因为变量的数量用于初始化。
这些答案被过度设计,专注于Array
OP 样本中的误导性使用。
a1 = a2 = a3 = []
# => []
测试结果
a1
# => []
a2
# => []
a3
# => []
a4 # for sake of comparison
NameError: undefined local variable or method `a4' for main:Object
您还可以执行以下操作:
a1=[]; a2=[]; a3=[]
以下代码段在所有 ruby 虚拟机上的行为是否相同?
a,b = b,nil
这一行的重点是将“a”设置为“b”中的值并重置“b”。