require используется для загрузки внешних файлов (библиотек, гемов, других Ruby-файлов) в текущую программу.
require 'json'
require './my_module.rb'
Ключевые особенности:
$LOAD_PATHrequire '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 для специальных случаев