当我写下面的代码时:
x= [1,2,3]
x << x
puts x
puts x[3]
puts x[3][3][3][3][3][3][3][3][3][3]
我得到了这个输出:
[1, 2, 3, [...]]
[1, 2, 3, [...]]
[1, 2, 3, [...]]
我不应该只得到[1,2,3,[1,2,3]]以及解释是什么?
答案 0 :(得分:10)
这没什么奇怪的。数组的第四个元素是数组本身,所以当你要求第四个元素时,你得到数组,当你要求第四个元素的第四个元素时,你得到数组,当你要求第四个元素时第四个元素的第四个元素的第四个元素的元素......你得到了数组。
这很简单。
唯一有点不寻常的是Array#to_s
检测到这种递归而不是进入无限循环,返回省略号。
答案 1 :(得分:7)
当您编写x << x
时,您向x
附加了对自身的引用,创建了一个递归/无限数组。
将此与x << x.dup
进行比较,x
会将x
的副本附加到[1,2,3,[1,2,3]]
。这等于{{1}}