Arrays Ruby是否每次调用“array.size”时都会重新计算数组大小?

Arrays Ruby是否每次调用“array.size”时都会重新计算数组大小?,arrays,ruby,Arrays,Ruby,是否有人能提供一些证据,证明Ruby是否在每次调用array.size、array.length或array.count时都会重新计算数组大小 提前谢谢 更新 为了让事情更清楚,我的意思是,每次调用array.size时,Ruby是否需要一次又一次地遍历整个数组来计算其元素的数量。从实用角度讲,Arraylength在Ruby中是动态的 您的问题无法得到规范的回答,因为阵列的查找和存储实现通常是特定于平台和VM的。然而,实际上,从Ruby解释器的persepctive来看,答案是肯定的,因为每次

是否有人能提供一些证据,证明Ruby是否在每次调用array.size、array.length或array.count时都会重新计算数组大小

提前谢谢

更新

为了让事情更清楚,我的意思是,每次调用array.size时,Ruby是否需要一次又一次地遍历整个数组来计算其元素的数量。

从实用角度讲,Arraylength在Ruby中是动态的 您的问题无法得到规范的回答,因为阵列的查找和存储实现通常是特定于平台和VM的。然而,实际上,从Ruby解释器的persepctive来看,答案是肯定的,因为每次调用都会向数组对象发送一条消息,要求它返回其当前长度

有些语言将数组的当前长度存储为数组本身的一个元素。还有其他办法。在Ruby 2.7.1中:

static VALUE
rb_ary_length(VALUE ary)
{
    long len = RARRAY_LEN(ary);
    return LONG2NUM(len);
}

C实现似乎在调用时检索存储的数组长度,但如果您想了解VM如何优化该数组的所有细节,就必须深入研究源代码。

否,Ruby跟踪数组大小。调用array.size几乎没有开销。@Stefan,这是一个有趣而有用的信息。散列、集合、范围、字符串呢?那么从数组派生的枚举数呢,比如[1,2,3]。每一个?Marian13,你的问题有些含糊不清,因为不清楚你所说的重新计算是什么意思。有人可能会说,无论何时调用方法或检索变量的值,都会进行计算。我把你的问题解释为一个实际的问题,比如问n=arr1.size;arr2.select{x | x