Лучшее руководство по Модуль Ruby (модуль) в 2024 году. В этом руководстве вы можете изучить Рубинтребуют заявление,Рубинвключают заявление,Рубин в Mixins,
Модуль Ruby (модуль)
Модуль (Module) представляет собой способ методов, классов и констант объединены образом. Модуль (Module) дает два преимущества.
- Модули обеспечивают пространствоимени предотвращения конфликтов имен.
- Модуль реализуетподмешатьустройств.
Модуль (Module) определяет пространство имен, эквивалент песочнице, ваши методы и константы не являются постоянными и методы конфликта в другом месте в нем.
Модуль подобный класс, но с другой вид:
- Модули не могут быть созданы
- нет ни одного Модуль подклассы
- Модуль может быть определен только другим модулем
грамматика
module Identifier statement1 statement2 rururururu. end
Модуль именованные константы и константы класса аналогично имени, начиная с большой буквы. Определение метода выглядит следующим образом: аналогичный модульный подход для определения определения методов класса.
С помощью методов класса, вы можете поместить имя модуля и точку перед именем класса метода для вызова модульный подход, вы можете использовать имя модуля и два двоеточия для ссылки на константу.
примеров
#!/usr/bin/ruby # 定义在 trig.rb 文件中的模块 module Trig PI = 3.141592654 def Trig.sin(x) # ru end def Trig.cos(x) # ru end end
Мы можем определить несколько функций с одинаковым именем, но разными функциональными модулями:
#!/usr/bin/ruby # 定义在 moral.rb 文件中的模块 module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # ru. 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. Таким образом , вы можете видеть , что класс наследует образец два модуля, вы можете сказать , класс образца использовать множественное наследование илиподмешать.