ruby多重赋值不按预期工作

时间:2014-06-16 18:57:41

标签: ruby

我正在尝试做这样的事情:

a = b = c = []

a << 1

现在我希望bcempty array,而a则有一个元素。但它不是那样工作,这里bc也包含相同的元素,它是如何工作的?

3 个答案:

答案 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
=> []