Ruby 关于 rotate 和 rotate!

cursorzz · April 19, 2012 · Last by skandhas replied at April 19, 2012 · 2183 hits

最近遇到一个很疑惑的问题。直接上 code 吧

array1 = []
array2 = []

a =[1,2,3,4]
b =[1,2,3,4]

3.times do  
  a.rotate!
  array1 << a
end
p array1

3.times do
  b = b.rotate
  array2 << b
end
p array2

结果是 [[4, 1, 2, 3], [4, 1, 2, 3], [4, 1, 2, 3]] [[2, 3, 4, 1], [3, 4, 1, 2], [4, 1, 2, 3]] 想请教下为什么第一个的 rotate!不管用呢?

Unknow user #1 April 19, 2012

大哥啊..array1 中的三个元素是同一对象...

并不是 rotate! 不管用,而是最后 array1 中存放的 3 个对象引用都是 a. 所以就是这个结果了。array2 存放的是 3 个新对象引用。

就你的例子简单来的说: array1 等于 [a,a,a] array2 等于 [b1,b2,b3]

所以看起来好像 rotate! 没起作用。

#1 楼 @jjym 这速度! :)

You need to Sign in before reply, if you don't have an account, please Sign up first.