这真让我感到困惑,似乎一次又一次地遇到ruby原生数据类型的方法,它们做同样的事情(本质上),但却有不同的名字。如果ruby和ruby社区强烈鼓励鸭子打字,为什么这些方法在各种类型中的命名一致?
答案 0 :(得分:11)
您似乎暗示Hash没有length
方法和/或其他枚举没有count
方法。事实并非如此。
count
是Enumerable
模块中定义的方法,因此可用于所有枚举。它与size
和length
的区别在于以下几种方式:
O(n)
中有一个运行时用于那些没有(并且总是当给出一个块当然)的运行时。 length
和size
(它们是同义词)是在所有可跟踪其大小的可枚举类上定义的方法(包括Hash
)。它们与计数的不同之处在于它们总是在O(1)
时间内返回长度并且不会阻塞。
总结:您可以在跟踪其大小的任何对象上调用length
或size
,并且可以在任何可枚举的对象上调用count
。所以鸭子打字不会受到任何阻碍。