Богатый источник методов, предоставляемых Ruby, которые доступны для использования классами.

Предпосылка

Эту тему будет легче понять, если вы обладаете следующими знаниями:





Модули в Ruby
Тот, который не может быть создан как класс!



Оглавление

Определение

Вызов модуля

Определение

Модуль Enumerable — это встроенный модуль, предоставляемый Ruby, который имеет набор методов, упакованных вместе, которые включены в другие встроенные классы Ruby, такие как Array, Hash и Range.

Он предназначен для предоставления полезной функциональности классам. Большинство итерационных методов, таких как select, reject, delete_if, find и т. д., связанных с Array и Hash, на самом деле не реализованы в этих классах, но используют ключевое слово include, чтобы сделать Enumerable методы доступными для этих классов.

Что-то вроде этого под капотом:

Модуль Enumerable состоит из нескольких методов, таких как:

  1. Сквозные методы (map, delete_if, select,и т. д.)
  2. Методы сортировки (sort, sort_by, и т. д.)
  3. Методы поиска (find, find_all, first,и т. д.)

Использование модуля Enumerable в классе

Если модуль Enumerable должен использоваться классом, то в этом классе должен быть явно объявлен метод each. Если метод an Enumerable передается с block, этот метод вызовет метод each и выполнит в нем операции block с помощью ключевого слова yield. Вот почему в приведенном выше программном файле enum_01.rb есть метод each, определенный в классах Array и Hash.

Что произойдет, если мы не используем метод each?

Следующий вывод для строки № 8:

enum.rb:13:in `map': undefined method `each' for #<Klass:0x000055632209f580 @arg="I am from class "> (NoMethodError)

Когда мы присваиваем block одному из методов Enumerable, map, мы видим, что он ищет метод each в классе Klass и, когда не может его найти, возвращает NoMethodError.

Метод map вернет массив, поскольку он предназначен для использования в классе Array, поэтому давайте рассмотрим еще один более практичный пример.

Для обеих программ, enum_03.rb и enum_04.rb, он использует метод each для успешного выполнения операции в block, переданном методу Enumerable, map.

Список всех методов Enumerable, доступных для использования в Официальной документации Ruby.

Почти все методы Enumerable вызывают метод each, а некоторые методы, такие как max, min или sort, вызывают оператор <=>.

Некоторые методы, такие как count и take, реализованы в классе Array вместо использования метода из модуля Enumerable для ускорения операций.

Это все важные вещи, которые нужно знать о модуле Enumerable.

Моя предыдущая статья:Модули в Ruby
Моя следующая статья:Класс-перечислительв Ruby

GitHub | ЛинкедИн