Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Ruby允许我将数组推送到自己身上?_Ruby_Arrays - Fatal编程技术网

为什么Ruby允许我将数组推送到自己身上?

为什么Ruby允许我将数组推送到自己身上?,ruby,arrays,Ruby,Arrays,此代码在Ruby中有效 a = [5,10,15] [5,10,15] a.push a [5,10,15,[...]] 导致第四个阵列插槽无限指向阵列本身。为什么Ruby允许这样做,并且该功能提供了任何实际的应用程序?由于Ruby是一种动态语言,数组本质上是“任意对象”的集合,因此您可以将任何您想要的东西推入其中,包括其他数组,包括(在本例中)对自身的引用。它就像Java中的ArrayList,可以做同样的事情(您可以将其添加到自身中,但为什么?) 有时候,递归结构可能会很有用,尽管我没有想

此代码在Ruby中有效

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有什么有用的应用程序吗?我能想到的最简单的例子是垃圾收集器—您在内存中保留了对每个对象的引用列表(包括该列表!)