Рубиновые модули и миксины
Модули
Модули - это способ группировки методов, классов и констант. В модулях есть два основных преимущества:
- Модули обеспечивают пространство имен и предотвращают конфликты имен.
- Модули реализуют смешанный механизм.
Пространство имен. Пространство имен можно использовать для организации кода по пакетам или функциям, которые отделяют общие имена от помех, создаваемых другими пакетами. Например, пространство имен IRB обеспечивает функциональность для irb, которая предотвращает конфликт для общего имени «Контекст».
Встроенная функциональность позволяет обмениваться общими методами между несколькими классами или модулями. Ruby поставляется с смешанным модулем Enumerable, который предоставляет множество методов перечисления на основе каждого метода, а Comparable позволяет сравнивать объекты на основе метода сравнения <=>.
Константы модуля называются так же, как константы класса, с начальной заглавной буквой.
Определения методов похожи на методы классов. Методы модуля имеют префикс с именем модуля, аналогично методам класса с префиксом имени класса.
Создать модуль:
Модуль создается с использованием ключевого слова module. Вот синтаксис:
ModuleName модуля statement1 оператор2 ........... конец
Пример:
module DecimalCode
RED ="rgb(255,0,0)"
GREEN ="rgb(0,128,0)"
def code
return "Red : Decimal code #{RED}."
end
def DecimalCode.code
return "Green: Decimal code #{GREEN}. "
end
end
puts(DecimalCode::RED)
puts( DecimalCode.code )
Выход:
RGB (255,0,0) Зеленый: десятичный код rgb (0,128,0).
В приведенном выше примере мы получили доступ к константам модуля так же, как и к константам класса, используя оператор разрешения :: scope (put (DecimalCode :: RED)), и обратились к методам модуля, используя точечную нотацию, то есть, указав имя модуля с последующим по периоду и имени метода (put (DecimalCode.code)).
Модуль может быть вновь открыт любое количество раз для добавления, изменения или удаления функциональности:
ModuleName модуля def my_method конец конец ModuleName модуля псевдоним my_alias my_method конец ModuleName модуля удалить_метод: мой_метод конец
Вложение:
Модули могут быть вложенными. Многие пакеты создают один внешний модуль (или класс), чтобы обеспечить пространство имен для их функциональности.
Внешний модуль модуль Внутренний конец конец
Вы также можете определить внутренние модули, используя :: при условии, что внешние модули (или классы) уже определены:
модуль Outer :: Inner :: GrandChild конец
Обратите внимание, что это вызовет NameError, если Outer и Outer :: Inner еще не определены.
Смешивание в модулях:
Объект может получить доступ к методам экземпляра модуля, включив этот модуль, используя метод include, который называется «Mixing in Modules». Смотрите следующий пример:
module A
module Class5
def c5
puts 'Number of students in Class V : 60'
end
end
module Class6
def c6
puts 'Number of students in Class VI : 65'
end
end
module Class7
def c7
puts 'Number of students in Class VI : 62'
end
end
class Student
include Class5
include Class6
include Class7
def display
puts 'Three modules have included.'
end
end
object=Student.new
object.display
object.c5
object.c6
object.c7
Выходы:
Три модуля включены. Количество учеников в классе V: 60 Количество учеников в VI классе: 65 Количество учеников в VI классе: 62
Предыдущая: Руби Классы
Далее: Ruby Tutorial
Новый контент: Composer: менеджер зависимостей для PHP , R программирования