无法在标题中简洁地解释我的问题,所以我把它放在这里.在询问我的问题之前,显示代码实际上会更容易:
array1 = []
array2 = [1,2,3]
array1 = array2
#=> array1 = [1,2,3]
array2.clear
#=> array1 = []
#=> array2 = []
Run Code Online (Sandbox Code Playgroud)
为什么在第二个数组上使用.clear方法也清除了第一个数组中的内容?我想我要问的是,一旦我们确定array1 = array2,为什么array1受到.clear我们申请的影响array2?看来这array1 = array2会在我的剧本持续时间内成立,这是对的吗?
为了array1保持不变,一旦我做的array2.clear,我需要实现array1 = array2不同的方式,如使用for循环和.unshift荷兰国际集团从元素array2和.push荷兰国际集团他们到这里来array1?
当你这样做
array1 = array2
Run Code Online (Sandbox Code Playgroud)
array1和array2参照同Array现在的对象.因此,您对其中任何一项进行的任何修改都会影响另一方.
array1.object_id
# => 2476740
array2.object_id
# => 2476740
Run Code Online (Sandbox Code Playgroud)
看到?他们也一样object_id.
如果此行为不符合您的预期,请尝试
array1 = array2.dup
Run Code Online (Sandbox Code Playgroud)
要么
array1 = array2.clone
Run Code Online (Sandbox Code Playgroud)