Вызов метода на Ruby-модуле

У меня есть следующий код Ruby:

module MyModule
  class MyClass
    def self.my_method
    end
  end
end

Для вызова my_method введите MyModule::MyClass.my_method. Я хотел бы написать обертку для my_method в самом модуле:

MyModule.my_method

Возможно ли это?

Ответы

Ответ 1

Простой метод:

module MyModule
  def self.my_method(*args)
    MyModule::MyClass.my_method(*args)
  end
end

Более жесткий метод:

Используйте метапрограммирование для записи функции для всех случаев (например, attr_accessor).

Ответ 2

Я не уверен, чего вы пытаетесь достичь, но: если вы сделаете его обычным методом и измените его с помощью module_function, вы сможете назвать его любым способом, который вы выберете.

#!/usr/bin/ruby1.8

module MyModule

  def my_method
    p "my method"
  end
  module_function :my_method

end

Сделав это, вы можете включить модуль и вызвать метод как метод экземпляра:

class MyClass

  include MyModule

  def foo
    my_method
  end

end

MyClass.new.foo      # => "my method"

или вы можете вызвать метод как метод класса в модуле:

MyModule.my_method   # => "my method"

Ответ 3

Вы можете определить метод непосредственно внутри модуля.

module MyModule
  def self.my_method
    puts "Hi I am #{self}"
  end
end

MyModule.my_method  #=> Hi I am MyModule