我有以下Ruby代码:
module MyModule
class MyClass
def self.my_method
end
end
end
要致电my_method
,请输入MyModule::MyClass.my_method
。我想在模块本身上为my_method
编写一个包装器:
MyModule.my_method
这可能吗?
答案 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