Люди привели здесь несколько хороших примеров, но вы также можете создавать и использовать модули следующим образом ( Mixins )
Модуль должен быть включен
#instance_methods.rb
module MyInstanceMethods
def foo
puts 'instance method foo called'
end
end
Модуль должен быть расширенный
#class_methods.rb
module MyClassMethods
def bar
puts 'class method bar called'
end
end
Включено Методы модуля действуют так, как если бы они были методами экземпляра класса, в который включен модуль
require 'instance_methods.rb'
class MyClass
include MyInstanceMethods
end
my_obj = MyClass.new
my_obj.foo #prints instance method foo called
MyClass.foo #Results into error as method is an instance method, _not_ a class method.
Расширенные методы модуля действуют так, как если бы они были методами класса того класса, в который включен модуль
require 'class_methods.rb'
class MyClass
extend MyClassMethods
end
my_obj = MyClass.new
my_obj.bar #Results into error as method is a class method, _not_ an instance method.
MyClass.bar #prints class method bar called
Вы даже можете расширить модуль только для определенного объекта класса. Для этого вместо расширения модуля внутри класса вы делаете что-то вроде
my_obj.extend MyClassMethods
Таким образом, только my_object
будет иметь доступ к MyClassMethods
методам модуля, а не к другим экземплярам класса, к которому принадлежит my_object. Модули очень, очень мощные. Вы можете узнать о них, используя базовую документацию API
Пожалуйста, извините, если в коде есть какие-то глупые ошибки, я не пробовал, но я надеюсь, что вы поняли.