我有以下Ruby代码:
module MyModule
class MyClass
def self.my_method
end
end
end
Run Code Online (Sandbox Code Playgroud)
要打电话my_method
,我进入MyModule::MyClass.my_method
.我想my_method
在模块本身上写一个包装器:
MyModule.my_method
Run Code Online (Sandbox Code Playgroud)
这可能吗?
Way*_*rad 31
我不确定你想要实现什么,但是:如果你把它作为常规方法并用module_function修改它,你将能够以你选择的任何方式调用它.
#!/usr/bin/ruby1.8
module MyModule
def my_method
p "my method"
end
module_function :my_method
end
Run Code Online (Sandbox Code Playgroud)
完成此操作后,您可以包含模块并将方法作为实例方法调用:
class MyClass
include MyModule
def foo
my_method
end
end
MyClass.new.foo # => "my method"
Run Code Online (Sandbox Code Playgroud)
或者您可以将该方法作为模块上的类方法调用:
MyModule.my_method # => "my method"
Run Code Online (Sandbox Code Playgroud)
use*_*365 15
简单方法:
module MyModule
def self.my_method(*args)
MyModule::MyClass.my_method(*args)
end
end
Run Code Online (Sandbox Code Playgroud)
更难的方法:
使用元编程为所有情况编写函数(如attr_accessor).
ans*_*hul 11
您可以直接在模块内定义方法.
module MyModule
def self.my_method
puts "Hi I am #{self}"
end
end
MyModule.my_method #=> Hi I am MyModule
Run Code Online (Sandbox Code Playgroud)