至少在Ruby 1.9.3中, Enumerable
对象没有length
属性。
据我所知,任何Enumerable
都是一个集合,如sort
和find_index
之类的方法所证明。
集合始终具有明确定义的长度(...正确吗?),为什么这不是属性?
最佳答案
Enumerable具有 count
方法,通常将其作为枚举的直观“长度”。
但是为什么不称它为“长度”呢?好吧,因为它的运行方式大不相同。在Ruby的内置数据结构(如Array
和Hash
)中,length
只是检索数据结构的预先计算的大小。它应该总是立即返回。
但是,对于Enumerable#count
来说,它没有办法知道它正在运行的是哪种结构,因此没有一种快速,聪明的方法来获取枚举的大小(这是因为Enumerable
是一个模块,可以包含在任何类中) 。它获取枚举大小的唯一方法是实际枚举它并随其计数。对于无限枚举,count
将(适本地)永远循环并且永不返回。
关于ruby - 为什么Enumerable在Ruby中没有length属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28839037/