在Ruby模块上调用方法

时间:2009-12-29 08:47:34

标签: ruby

我有以下Ruby代码:

module MyModule
  class MyClass
    def self.my_method
    end
  end
end

要致电my_method,请输入MyModule::MyClass.my_method。我想在模块本身上为my_method编写一个包装器:

MyModule.my_method

这可能吗?

3 个答案:

答案 0 :(得分:29)

我不确定您要实现的目标,但是:如果您将其作为常规方法并使用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"

答案 1 :(得分:14)

简单方法:

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

更难的方法:

使用元编程为所有情况编写函数(如attr_accessor)。

答案 2 :(得分:10)

您可以直接在模块内定义方法。

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

MyModule.my_method  #=> Hi I am MyModule