Ruby 关于 rotate 和 rotate!

cursorzz · 2012年04月19日 · 最后由 skandhas 回复于 2012年04月19日 · 2188 次阅读

最近遇到一个很疑惑的问题。直接上 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!不管用呢?

匿名 #1 2012年04月19日

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

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

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

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号