【发布时间】:2014-08-14 09:47:40
【问题描述】:
在下面的代码中,Object方法clone或dup复制了q1的指针,并没有深复制。
q1 = Queue.new
q1.push(1) # => 1
q1.push(2) # => 1,2
q2 = q1.clone
q2.pop # => 1
puts q1.size # => 1 (not 2)
我试过这个How do I copy a hash in Ruby?,但它也不起作用。我想知道为什么 Queue 实例没有被深度复制。是为了线程安全吗?
【问题讨论】:
-
Queue.pop顺便从队列的开头删除一个元素,所以q2.pop将返回1而不是您的示例中的2。 -
是的,我的意思是左边的元素 2。
-
我明白了,这有点令人困惑,因为通常
# => xx表示表达式的返回值:)。 -
Yan,回复@Daniël 的观点,如果你想在
q2.pop之后显示q2是什么,只需添加q2 # => 2行。