кодесурса

Рубиновые модули и миксины

script1adsense2code
script1adsense3code

Модули

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

  • Модули обеспечивают пространство имен и предотвращают конфликты имен.
  • Модули реализуют смешанный механизм.

Пространство имен. Пространство имен можно использовать для организации кода по пакетам или функциям, которые отделяют общие имена от помех, создаваемых другими пакетами. Например, пространство имен 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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code