ruby多重分配未按预期工作

ruby多重分配未按预期工作,ruby,Ruby,我正在尝试这样做: a = b = c = [] a << 1 a=b=c=[] 当你这样做的时候 a = b = c = [] 这三个变量都指向内存中的同一位置。它们是对内存中相同位置的三个引用 所以当你这么做的时候 a当您这样做时 a = b = c = [] 这三个变量都指向内存中的同一位置。它们是对内存中相同位置的三个引用 所以当你这么做的时候 a您可以使用.dup在不同的内存位置创建具有相同值的对象 这里是不带c的示例,因为它不相关 irb(main):028:0&

我正在尝试这样做:

a = b = c = []

a << 1
a=b=c=[]
当你这样做的时候

a = b = c = []
这三个变量都指向内存中的同一位置。它们是对内存中相同位置的三个引用

所以当你这么做的时候

a当您这样做时

a = b = c = []
这三个变量都指向内存中的同一位置。它们是对内存中相同位置的三个引用

所以当你这么做的时候


a您可以使用
.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
=> []
irb(main):028:0>a=b=[]
=> []
irb(main):029:0>a.object_id#a和b在内存中引用相同的位置
=> 19502520
irb(main):030:0>b.object\u id
=> 19502520
irb(主):031:0>b=a.dup
=> []
irb(main):032:0>b.object_id#b表示内存中的不同位置
=> 18646920
irb(主要):033:0>a[1]
irb(主):034:0>b
=> []

您可以使用
.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
=> []
irb(main):028:0>a=b=[]
=> []
irb(main):029:0>a.object_id#a和b在内存中引用相同的位置
=> 19502520
irb(main):030:0>b.object\u id
=> 19502520
irb(主):031:0>b=a.dup
=> []
irb(main):032:0>b.object_id#b表示内存中的不同位置
=> 18646920
irb(主要):033:0>a[1]
irb(主):034:0>b
=> []

如果需要3个单独的阵列,请执行以下操作:

a, b, c = [], [], []

如果需要3个单独的阵列,请执行以下操作:

a, b, c = [], [], []

这是因为
a
b
c
都指向同一个数组。这不是术语“多重赋值”通常所指的。多重赋值的形式是
a,b=c,d
。这是因为
a
b
c
都指同一个数组。这不是术语多重赋值通常所指的。多重赋值的形式为
a,b=c,d
。OP可以执行
a.object\u id
b.object\u id
。。。为了更清楚地看到这一点,@Akavall但是当我们分配
a=b=0
,并检查
a.object\u id
b.object\u id
时,它们也是一样的,但它们与
a=b=[]
完全不同,OP可以做
a.object\u id
b.object\u id
。。。为了更清楚地看到这一点。@Akavall但是当我们分配
a=b=0
,并检查
a.object\u id
b.object\u id
时,它们也是一样的,但它们与
a=b=[]
完全不同,这可能是OP想要做的。不过,从技术上来说,这并不能回答他的问题。好吧,我明白你的意思,你是对的@Vimsha已经解释过了,所以不想重复答案,只是给出了一个解决方案,这可能就是OP想要做的。不过,从技术上来说,这并不能回答他的问题。好吧,我明白你的意思,你是对的@Vimsha已经解释过了,所以不想重复答案,只是给出了一个解决方案