persone hanno dato alcuni esempi bello qui, ma è possibile creare e moduli di uso nel seguente modo così (Mixins)
modulo da inclusi
#instance_methods.rb
module MyInstanceMethods
def foo
puts 'instance method foo called'
end
end
Modulo di essere esteso
#class_methods.rb
module MyClassMethods
def bar
puts 'class method bar called'
end
end
Incluso metodi modulo agire come se fossero metodi della classe in cui il modulo è incluso
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.
estese metodi del modulo di istanza si comportano come se fossero metodi di classe della classe in cui il modulo è incluso
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
È anche possibile estendere un modulo solo per uno specifico oggetto di classe.A tal fine, invece di estendere il modulo all'interno della classe, fai qualcosa come
my_obj.extend MyClassMethods
questo modo, solo il my_object
avranno accesso a MyClassMethods
metodi modulo e non altre istanze della classe a cui appartiene my_object. I moduli sono molto potenti. Puoi imparare su di loro usando core API documentation
Per favore scusami se ci sono degli errori stupidi nel codice, non l'ho provato ma spero che tu abbia capito l'idea.
Probabilmente vorrai usare "def self.random" per evitare problemi quando il nome del modulo cambia. Questa è una pratica comune di Ruby. – molf