我正在尝试做这样的事情:
a = b = c = []
a << 1
现在我希望b
和c
为empty array
,而a
则有一个元素。但它不是那样工作,这里b
和c
也包含相同的元素,它是如何工作的?
答案 0 :(得分:4)
当你这样做时
a = b = c = []
所有三个变量都指向内存中的相同位置。它们是对内存中相同位置的三个引用
所以当你这样做时
a << 1
,您正在写入所有三个变量引用的内存空间
答案 1 :(得分:2)
如果你想要3个独立的数组,请执行:
a, b, c = [], [], []
答案 2 :(得分:0)
您可以使用.dup
在不同的内存位置创建具有相同值的对象。
以下是没有c
的示例,因为它无关紧要。
irb(main):028:0> a = b = []
=> []
irb(main):029:0> a.object_id #a and b refer to the same location in memory
=> 19502520
irb(main):030:0> b.object_id
=> 19502520
irb(main):031:0> b = a.dup
=> []
irb(main):032:0> b.object_id #b refers to different location in memory
=> 18646920
irb(main):033:0> a << 1
=> [1]
irb(main):034:0> b
=> []