se podría añadir
module SimpleTask
def task1
end
def task2
end
def task3
end
module_function :task2
end
De modo que usted puede llamar al método como un método de clase en el módulo, además de tener como un método de instancia en los lugares que hace quieren los tres métodos, es decir:
class Foo
include SimpleTask
end #=> Foo.new.task2
class LessFoo
def only_needs_the_one_method
SimpleTask.task2
end
end #=> LessFoo.new.only_needs_the_one_method
O, si realmente no hay estado compartido en el módulo y no te importa utilizar siempre el nombre del módulo en sí, puede declarar todos los métodos de clase de nivel, así:
module SimpleTask
def self.task1
end
def self.task2
end
def self.task3
end
end
class Foo
include SimpleTask # Does, more or less nothing now
def do_something
SimpleTask.task1
end
end
#=> Foo.new.task2 #=> "task2 not a method or variable in Foo"
#=> Foo.new.do_something does, however, work
class LessFoo
def only_needs_the_one_method
SimpleTask.task2
end
end #=> LessFoo.new.only_needs_the_one_method works as well in this case
pero tendría que cambiar todo el llamantes en ese caso.
posible duplicado de [¿Puedo invocar un método de instancia en un módulo de Ruby sin incluirlo?] (Http://stackoverflow.com/questions/322470/can-i-invoke-an-instance-method-on-a -ruby-module-without-including-it) –