【问题标题】:Why does Ruby allow me to push an array on itself? [duplicate]为什么 Ruby 允许我自己推一个数组? [复制]
【发布时间】:2014-04-29 03:01:53
【问题描述】:

此代码在 Ruby 中有效

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

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

【问题讨论】:

  • 我能想到的最简单的例子是垃圾收集器——你保留一个对内存中每个对象的引用列表(包括那个列表!)

标签: ruby arrays


【解决方案1】:

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

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

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

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

【讨论】:

  • 有什么好用的应用吗?
【解决方案2】:

由于 Ruby 是一门动态语言,数组本质上是“任何对象”的集合,因此您可以将任何您想要的东西放入其中,包括其他数组,包括(在这种情况下)对自身的引用。就像 Java 中的 ArrayList&lt;Object&gt; 一样,它可以做同样的事情(你可以将其添加到自身,但为什么呢?)

递归结构有时可能很有用,但什么都没有想到。

【讨论】:

    猜你喜欢
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    相关资源
    最近更新 更多