-1

这真的让我感到困惑,似乎我一次又一次地遇到了 ruby​​ 本机数据类型中的方法,这些方法(本质上)做同样的事情,但有不同的名称。如果 ruby​​ 和 ruby​​ 社区如此强烈地鼓励鸭子类型,那么为什么这些方法在类型之间没有一致的命名呢?

4

1 回答 1

11

您似乎暗示 Hash 没有length方法和/或其他可枚举项没有count方法。那不是真的。

countEnumerable模块中定义的方法,因此可用于所有枚举。它在以下方面size有所不同:length

  1. 它(可选)采用一个块来指定要计算的元素类型。
  2. 它适用于所有可枚举项 - 不仅仅是那些跟踪其大小的枚举 - 但是O(n)对于那些没有的枚举(当然总是在给定一个块时),它有一个运行时。

lengthsize(它们是同义词)是在所有可枚举类上定义的方法,这些类跟踪它们的大小(包括Hash)。它们与 count 的不同之处在于它们总是及时返回长度O(1)并且不占用块。

总而言之:您可以调用length或调用size任何跟踪其大小的对象,并且可以调用count任何可枚举的对象。所以鸭子打字不会受到任何阻碍。

于 2011-05-08T15:51:58.913 回答