Похоже, вы подразумеваете, что в Hash нет метода length
и / или в других перечислимых элементах нет метода count
. Это не правда.
count
- это метод, определенный в модуле Enumerable
и доступный для всех перечислимых элементов. Он отличается от size
и length
следующими способами:
- Он (необязательно) принимает блок, указывающий, какой тип элементов считать.
- Он доступен на всех перечислимых объектах - не только на тех, которые отслеживают их размер - однако он имеет время выполнения в
O(n)
для тех, которые этого не делают (и всегда, когда дан блок, конечно).
length
и size
(которые являются синонимами) - это методы, определенные для всех перечислимых классов, которые отслеживают их размер (включая Hash
). Они отличаются от количества тем, что всегда возвращают длину в O(1)
времени и не берут блок.
В итоге: вы можете вызвать length
или size
для любого объекта, который отслеживает его размер, и вы можете вызвать count
для любого перечисляемого. Так что печатание утки никак не мешает.