Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Ruby中,当我将数组X设置为等于数组Y并对数组X进行更改时,为什么还要对数组Y进行更改?_Arrays_Ruby - Fatal编程技术网

Arrays 在Ruby中,当我将数组X设置为等于数组Y并对数组X进行更改时,为什么还要对数组Y进行更改?

Arrays 在Ruby中,当我将数组X设置为等于数组Y并对数组X进行更改时,为什么还要对数组Y进行更改?,arrays,ruby,Arrays,Ruby,在此代码中: letters = %w{a b c d e f g} letters_2 = letters i = 0 while i < letters.length letters[i] = "X" puts "letters = " + letters.join puts "letters_2 = " + letters_2.join puts "======================" i+=1 end 字母=%w{a b c

在此代码中:

letters = %w{a b c d e f g}
letters_2 = letters

i = 0
while i < letters.length
    letters[i] = "X"
    puts "letters = " + letters.join
    puts "letters_2 = " + letters_2.join
    puts "======================"

    i+=1
end
字母=%w{a b c d e f g}
字母2=字母
i=0
而我只知道字母的长度
字母[i]=“X”
放置“字母=”+字母。连接
将“字母2=”+字母2.连接
放入“==================================”
i+=1
结束

当代码仅显式修改字母数组时,为什么字母2数组会发生更改?

您只定义了一个数组
字母

然后将
字母
分配给
字母2
。因此,您可以创建与
字母
相同的数组
字母
。因此对
字母
所做的任何更改都将影响
字母2

两个数组引用相同的
对象\u id

您可以检查
letters.object\u id
是否与
letters\u 2.object\u id

两个数组引用相同的内存地址

2.2.3 :038 > letters = %w{a b c d e f g}
 => ["a", "b", "c", "d", "e", "f", "g"] 
2.2.3 :039 > letters_2 = letters
 => ["a", "b", "c", "d", "e", "f", "g"] 
2.2.3 :040 > letters_2
 => ["a", "b", "c", "d", "e", "f", "g"] 
2.2.3 :041 > letters
 => ["a", "b", "c", "d", "e", "f", "g"] 

只能定义一个数组
字母

然后将
字母
分配给
字母2
。因此,您可以创建与
字母
相同的数组
字母
。因此对
字母
所做的任何更改都将影响
字母2

两个数组引用相同的
对象\u id

您可以检查
letters.object\u id
是否与
letters\u 2.object\u id

两个数组引用相同的内存地址

2.2.3 :038 > letters = %w{a b c d e f g}
 => ["a", "b", "c", "d", "e", "f", "g"] 
2.2.3 :039 > letters_2 = letters
 => ["a", "b", "c", "d", "e", "f", "g"] 
2.2.3 :040 > letters_2
 => ["a", "b", "c", "d", "e", "f", "g"] 
2.2.3 :041 > letters
 => ["a", "b", "c", "d", "e", "f", "g"] 

在您的示例中,只有一个数组,
letters
letters_2
都分配给它

听起来你想要的是
letters\u2
是一个单独的数组,它是从
letters
数组初始化的,但之后是独立的?如果是,那么一种方法是使用:


在您的示例中,只有一个数组,
letters
letters_2
都分配给它

听起来你想要的是
letters\u2
是一个单独的数组,它是从
letters
数组初始化的,但之后是独立的?如果是,那么一种方法是使用:


您正在分配相同的引用

你可以在这里看到

letters = %w{a b c d e f g}
letters_2 = letters

puts letters.object_id    #4579428
puts letters_2.object_id  #4579428
因此,如果要将第二个数组作为单独的数组,则在将第一个数组分配给第二个数组时调用“dup”函数

letters = %w{a b c d e f g}
letters_2 = letters.dup
puts letters.object_id      #18932832
puts letters_2.object_id    #18932580

您正在分配相同的引用

你可以在这里看到

letters = %w{a b c d e f g}
letters_2 = letters

puts letters.object_id    #4579428
puts letters_2.object_id  #4579428
因此,如果要将第二个数组作为单独的数组,则在将第一个数组分配给第二个数组时调用“dup”函数

letters = %w{a b c d e f g}
letters_2 = letters.dup
puts letters.object_id      #18932832
puts letters_2.object_id    #18932580

@萨加潘迪亚82:的确如此。我将重新表述我的回答,以避免暗示只有一种方法可以做到这一点。@Sagarpandya2:的确如此。我将重新表述我的回答,以避免暗示只有一种方法可以做到这一点。这就是OP所描述的。问题是为什么更改会同时影响这两个数组?@Stefan两个数组都引用相同的内存地址。您在第一句中提到“仅一个数组”,随后又提到“两个数组”。这似乎是矛盾的,从你的解释中不清楚是否有一个或两个数组。@Stefan我已经编辑了我的答案。谢谢你的建议。这就是OP所描述的。问题是为什么更改会同时影响这两个数组?@Stefan两个数组都引用相同的内存地址。您在第一句中提到“仅一个数组”,随后又提到“两个数组”。这似乎是矛盾的,从你的解释中不清楚是否有一个或两个数组。@Stefan我已经编辑了我的答案。谢谢你的建议。另一种思考方式是
字母
字母2
是同一个对象的不同名称。另一种思考方式是
字母
字母2
是同一个对象的不同名称。因为你已经用
对象
证明了初始数组是相同的id,也许您可以包含后一个数组的
对象id
s,以表明它们确实不同。@sagarpandya82好的,已更新。因为您已经使用
对象id
显示了初始数组是相同的,也许您可以包含后一个数组的
对象id
s,以表明它们确实不同。@sagarpandya82好的,已更新。