Модули и миксины Ruby

Модули

Модули — это способ группировки методов, классов и констант. У модулей есть два основных преимущества:

  • Модули предоставляют пространство имен и предотвращают конфликты имен.
  • Модули реализуют возможность микширования.

Пространство имен: пространство имен может использоваться для организации кода по пакетам или функциям, которые отделяют общие имена от вмешательства других пакетов. Например, пространство имен IRB обеспечивает функциональность для irb, которая предотвращает конфликт для общего имени «Контекст».

Функциональность смешивания позволяет использовать общие методы в нескольких классах или модулях. Ruby поставляется с дополнительным модулем Enumerable, который предоставляет множество методов перечисления на основе каждого метода, а Comparable позволяет сравнивать объекты на основе метода сравнения .

Константы модуля называются так же, как константы класса, с начальной буквы в верхнем регистре.

Определения методов похожи на методы класса. Методы модуля имеют префикс с именем модуля, аналогично методам класса с префиксом имени класса.

Создание модуля:

Модуль создается с использованием ключевого слова module. Вот синтаксис:

 module ModuleName statement1 statement2 ........... end 

Пример:

  module DecimalCode RED = "rgb (255,0,0)" GREEN = "rgb (0,128,0)" def code return "Красный: десятичный код # {RED}  . "  end def DecimalCode.code return "Зеленый: десятичный код # {GREEN}." end end put (DecimalCode :: RED) put (DecimalCode.code)  

Вывод:

 rgb (255,0,0) Зеленый: десятичный код rgb (0,128,0). 

В приведенном выше примере мы получили доступ к константам модуля так же, как и к классу константы с помощью оператора разрешения :: scope (put (DecimalCode :: RED)) и доступ к методам модуля с использованием точечной нотации, то есть путем указания имени модуля, за которым следует точка, и имени метода (put (DecimalCode.code)).

Модуль можно открывать повторно любое количество раз для добавления, изменения или удаления функциональности:

 module ModuleName def my_method endendmodule ModuleName псевдоним my_alias my_methodendmodule ModuleName remove_method: my_methodend 

Вложение:

Модули могут быть вложенными. Многие пакеты создают единственный внешний модуль (или класс), чтобы предоставить пространство имен для своей функциональности.

 module Внешний модуль Внутренний конец 

Вы также можете определить внутренние модули, используя :: при условии, что внешние модули (или классы) уже определены:

 module Outer :: Inner :: GrandChild end 

Обратите внимание, что это вызовет ошибку NameError, если Outer и Outer :: Inner еще не определены.

Смешивание в модулях:

Объект может получить доступ к методам экземпляра модуля, включив этот модуль с помощью метода include, который называется «Смешивание в модулях». См. Следующий пример:

  модуль Amodule Class5 def c5 помещает 'Количество учеников в классе V: 60' endendmodule Class6 def c6 помещает 'Количество учеников в классе VI: 65'  endendmodule Class7 def c7 помещает «Количество учеников в классе VI: 62» endendclass Student include Class5 include Class6 include Class7 def display устанавливает «Три модуля включены».  endendobject = Student.newobject.displayobject.c5object.c6object.c7  

Выводы:

 Включены три модуля. Количество студентов в классе V: 60Число  учеников в классе VI: 65Количество учеников в классе VI: 62 

Оцените статью
nanomode.ru
Добавить комментарий