为什么Ruby允许我自己推送数组?

时间:2014-04-28 15:23:27

标签: ruby arrays

此代码在Ruby中有效

a = [5,10,15]
[5,10,15]
a.push a
[5,10,15,[...]]

导致第四个数组槽指向数组本身,(貌似)是无限的。为什么Ruby允许这样做,功能是否提供任何实际应用?

2 个答案:

答案 0 :(得分:3)

因为在Ruby中,一切都是对象,变量只指向对象(更严格地说,是内存位置)。数组是这样一个指针的集合,这意味着它可以存储指向自身的指针。它不是Ruby中添加的额外功能,它实际上是一个额外的功能,不允许它。

关于申请,请查看“What are recursive arrays good for?”(有向图表示)。

但请注意,这样的数组不是无限的:

a = []
a << a
a.length = 1

答案 1 :(得分:0)

由于Ruby是一种动态语言,因此数组本质上是一个&#34;任何对象的集合&#34;所以你可以把任何你想要的东西推进去,包括其他数组,包括(在这种情况下)对它自己的引用。它就像Java中的ArrayList<Object>,可以做同样的事情(你可以把它添加到自身,但为什么呢?)

虽然没有任何想法,但有时候使用递归结构可能会有用。