至少在Ruby 1.9.3中, Enumerable 对象没有length属性。

据我所知,任何Enumerable都是一个集合,如sortfind_index之类的方法所证明。

集合始终具有明确定义的长度(...正确吗?),为什么这不是属性?

最佳答案

Enumerable具有 count 方法,通常将其作为枚举的直观“长度”。

但是为什么不称它为“长度”呢?好吧,因为它的运行方式大不相同。在Ruby的内置数据结构(如ArrayHash)中,length只是检索数据结构的预先计算的大小。它应该总是立即返回。

但是,对于Enumerable#count来说,它没有办法知道它正在运行的是哪种结构,因此没有一种快速,聪明的方法来获取枚举的大小(这是因为Enumerable是一个模块,可以包含在任何类中) 。它获取枚举大小的唯一方法是实际枚举它并随其计数。对于无限枚举,count将(适本地)永远循环并且永不返回。

关于ruby - 为什么Enumerable在Ruby中没有length属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28839037/

10-11 13:34