为什么Ruby允许我在自己身上推送一个数组



此代码在Ruby 中有效

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

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

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

至于应用程序,请查看"递归数组的优点是什么?"(有向图表示)。

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

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

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

有时,递归结构可能很有用,尽管没有任何想法。

最新更新