为什么Ruby允许我将数组推送到自己身上?
此代码在Ruby中有效为什么Ruby允许我将数组推送到自己身上?,ruby,arrays,Ruby,Arrays,此代码在Ruby中有效 a = [5,10,15] [5,10,15] a.push a [5,10,15,[...]] 导致第四个阵列插槽无限指向阵列本身。为什么Ruby允许这样做,并且该功能提供了任何实际的应用程序?由于Ruby是一种动态语言,数组本质上是“任意对象”的集合,因此您可以将任何您想要的东西推入其中,包括其他数组,包括(在本例中)对自身的引用。它就像Java中的ArrayList,可以做同样的事情(您可以将其添加到自身中,但为什么?) 有时候,递归结构可能会很有用,尽管我没有想
a = [5,10,15]
[5,10,15]
a.push a
[5,10,15,[...]]
导致第四个阵列插槽无限指向阵列本身。为什么Ruby允许这样做,并且该功能提供了任何实际的应用程序?由于Ruby是一种动态语言,数组本质上是“任意对象”的集合,因此您可以将任何您想要的东西推入其中,包括其他数组,包括(在本例中)对自身的引用。它就像Java中的
ArrayList
,可以做同样的事情(您可以将其添加到自身中,但为什么?)
有时候,递归结构可能会很有用,尽管我没有想到任何东西。因为在Ruby中,一切都是对象,变量只指向对象(更严格地说,是内存位置)。数组是此类指针的集合,这意味着它可以存储指向自身的指针。这不是Ruby中添加的额外功能,不允许它实际上是额外的功能 对于应用程序,请检查“”(有向图表示) 但是请注意,这样的数组不是无限的:
a = []
a << a
a.length = 1
a=[]
a有什么有用的应用程序吗?我能想到的最简单的例子是垃圾收集器—您在内存中保留了对每个对象的引用列表(包括该列表!)