La gente ha dado algunos ejemplos agradables aquí, pero usted puede crear y usar módulos de la siguiente manera así (Mixins)
Módulo ser incluido
#instance_methods.rb
module MyInstanceMethods
def foo
puts 'instance method foo called'
end
end
módulo que se extendida
#class_methods.rb
module MyClassMethods
def bar
puts 'class method bar called'
end
end
Incluido métodos módulo actúan como si son métodos de instancia de la clase en la que el módulo está incluido
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.
extendidas métodos módulo actúan como si son métodos de clase de la clase en la que el módulo está incluido
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
Incluso puede extender un módulo solo para un objeto específico de la clase.Para ese propósito en lugar de extender el módulo dentro de la clase, haces algo como
my_obj.extend MyClassMethods
De esta manera, sólo el my_object
tendrá acceso a los métodos MyClassMethods
módulo y no otras instancias de la clase a la que pertenece mi_objeto. Los módulos son muy muy poderosos. Puedes aprender sobre ellos usando core API documentation
Disculpa si hay errores tontos en el código, no lo probé, pero espero que entiendas la idea.
Probablemente desee utilizar "def self.random" para evitar problemas cuando cambie el nombre de su módulo. Esta es la práctica común de Ruby. – molf