如果 ruby​​ 如此鼓励鸭子输入,为什么我们不使用 Hash.count 而不是 Hash.length?

发布于 2024-11-05 18:33:09 字数 123 浏览 0 评论 0原文

这确实让我感到困惑,似乎我一次又一次地遇到 ruby​​ 本机数据类型中的方法,它们执行相同的操作(本质上),但具有不同的名称。如果 ruby​​ 和 ruby​​ 社区如此强烈鼓励鸭子类型,那么为什么这些方法的命名不跨类型一致呢?

This is something that really confuses me, it seems like time and time again I run into methods in ruby native data types that do the same thing (essentially), and yet have different names. If duck typing is so strongly encouraged by ruby and the ruby community, why aren't these methods named consistently across types?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笛声青案梦长安 2024-11-12 18:33:09

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

count 是在 Enumerable 模块中定义的方法,因此可用于所有枚举。它与 sizelength 的不同之处如下:

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

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

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

You seem to imply that Hash does not have a length method and/or that other enumerables don't have a count method. That is not true.

count is a method defined in the Enumerable module and thus available on all enumerables. It differs from size and length in the following ways:

  1. It (optionally) takes a block specifying which kind of elements to count.
  2. It's available on all enumerables - not just those that keep track of their size - however it has a runtime in O(n) for those that don't (and always when given a block of course).

length and size (which are synonyms) are methods defined on all enumerable classes that keep track of their size (including Hash). They differ from count in that they always return the length in O(1) time and don't take a block.

In summary: You can call length or size on any object that keeps track of its size and you can call count on any enumerable. So duck typing is not hampered in any way.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文