这真的让我感到困惑,似乎我一次又一次地遇到了 ruby 本机数据类型中的方法,这些方法(本质上)做同样的事情,但有不同的名称。如果 ruby 和 ruby 社区如此强烈地鼓励鸭子类型,那么为什么这些方法在类型之间没有一致的命名呢?
问问题
251 次
1 回答
11
您似乎暗示 Hash 没有length
方法和/或其他可枚举项没有count
方法。那不是真的。
count
是Enumerable
模块中定义的方法,因此可用于所有枚举。它在以下方面size
有所不同:length
- 它(可选)采用一个块来指定要计算的元素类型。
- 它适用于所有可枚举项 - 不仅仅是那些跟踪其大小的枚举 - 但是
O(n)
对于那些没有的枚举(当然总是在给定一个块时),它有一个运行时。
length
和size
(它们是同义词)是在所有可枚举类上定义的方法,这些类跟踪它们的大小(包括Hash
)。它们与 count 的不同之处在于它们总是及时返回长度O(1)
并且不占用块。
总而言之:您可以调用length
或调用size
任何跟踪其大小的对象,并且可以调用count
任何可枚举的对象。所以鸭子打字不会受到任何阻碍。
于 2011-05-08T15:51:58.913 回答