require
используется для загрузки внешних файлов (библиотек, гемов, других Ruby-файлов) в текущую программу.
require 'json'
require './my_module.rb'
Ключевые особенности:
$LOAD_PATH
require 'net/http'
)require 'rails'
)require_relative 'my_file'
)Пример с проверкой:
unless defined?(SomeLibrary)
require 'some_library'
end
include
добавляет методы модуля в класс как instance methods.
module MyModule
def module_method
"Hello from module!"
end
end
class MyClass
include MyModule
end
obj = MyClass.new
obj.module_method # => "Hello from module!"
Важные аспекты:
Проверка включенных модулей:
MyClass.ancestors # => [MyClass, MyModule, ...]
Характеристика | require | include |
---|---|---|
Назначение | Загрузка файлов | Примешивание модулей |
Область действия | Глобальная | Класс/модуль |
Повторный вызов | Игнорируется | Добавляет снова |
Тип методов | - | Instance methods |
Альтернативы | require_relative | extend , prepend |
# В файле 'utilities.rb'
module Utilities
def self.log(message)
puts "[LOG] #{message}"
end
end
# В основном файле
require './utilities'
include Utilities
Utilities.log("System started") # Вызов метода модуля
autoload
- отложенная загрузка:
autoload :MyModule, 'my_module'
extend
- добавление методов модуля как class methods:
class MyClass
extend MyModule
end
prepend
- более высокий приоритет чем include
:
class MyClass
prepend MyModule
end
require
- механизм загрузки внешнего кода:
include
- механизм примешивания модулей:
Для эффективной организации кода:
require
для зависимостейinclude
для DRY-принципаextend
/prepend
для специальных случаев