在Ruby中使用.clear方法

giw*_*ook 0 ruby methods

无法在标题中简洁地解释我的问题,所以我把它放在这里.在询问我的问题之前,显示代码实际上会更容易:

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

Yu *_*Hao 6

当你这样做

array1 = array2
Run Code Online (Sandbox Code Playgroud)

array1array2参照同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)

  • 我认为使用`object_id`可以最好地证明正在发生的事情. (2认同)