Latest web development tutorials

Модуль Ruby (модуль)

Модуль (Module) представляет собой способ методов, классов и констант объединены образом. Модуль (Module) дает два преимущества.

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

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

Модуль подобный класс, но с другой вид:

  • Модули не могут быть созданы
  • нет ни одного Модуль подклассы
  • Модуль может быть определен только другим модулем

грамматика

module Identifier
   statement1
   statement2
   ...........
end

Модуль именованные константы и константы класса аналогично имени, начиная с большой буквы. Определение метода выглядит следующим образом: аналогичный модульный подход для определения определения методов класса.

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

примеров

#!/usr/bin/ruby

# 定义在 trig.rb 文件中的模块

module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end

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

#!/usr/bin/ruby

# 定义在 moral.rb 文件中的模块

module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   end
end

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

Рубинтребуют заявление

требуется утверждение аналогично C и C ++, и включают в себя заявления в заявлении импорта Java. Если программа стороннего производителя вы хотите использовать какой - либо из модулей были определены, вы можете просто использоватьРубинтребуется заявление , чтобы загрузить файл модуля:

грамматика

require filename

При этом расширение файла не требуется.rb.

примеров

$ LOAD_PATH << '.'

требуется 'trig.rb'
требуют "морального"

у = Trig.sin (Trig :: PI / 4)
правонарушитель = Moral.sin (Moral :: VERY_BAD)

Здесь мы используем$ LOAD_PATH << '. Пусть Руби знает , что мы должны искать указанного файла в текущем каталоге.Если вы не хотите использовать $ LOAD_PATH, вы можете использоватьrequire_relative для ссылки на файл из относительного каталога.

Примечание: В данном случае файл содержит то же имя функции.Таким образом, это приведет к запутывания при обращении к вызывающей программе, но модули избежать этого запутывания кода, и мы можем использовать имя модуля, чтобы вызвать соответствующую функцию.

Рубинвключают заявление

Вы можете встроить модуль в классе. Для того , чтобы встроить в модуле класса, вы можете использовать операторывключаютв своем классе:

грамматика

include modulename

Если модуль определен в отдельном файле, поэтому , прежде чем нужно использовать внедряемый модультребуютутверждения ссылки на файл.

примеров

Предполагая , что следующие модули , написанные вsupport.rbфайле.

module Week
   FIRST_DAY = "Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   end
end

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

#!/usr/bin/ruby
$LOAD_PATH << '.'
require "support"

class Decade
include Week
   no_of_yrs=10
   def no_of_months
      puts Week::FIRST_DAY
      number=10*12
      puts number
   end
end
d1=Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months

Это дает следующие результаты:

Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120

Рубин в Mixins

Перед тем как читать этот раздел, вам потребуется предварительное понимание объектно-ориентированных концепций.

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

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

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

Давайте посмотрим на следующем примере кода, глубокое понимание Mixin:

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end

class Sample
include A
include B
   def s1
   end
end

samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1
  • Модуль состоит из процесса a1 и a2.
  • Модуль B методом композиции Б1 и Б2.
  • Класс Sample содержит модули A и B.
  • образец класса могут получить доступ все четыре метода, а именно, а1, а2, b1 и b2.
  • Таким образом , вы можете видеть , что класс наследует образец два модуля, вы можете сказать , класс образца использовать множественное наследование илиподмешать.