在Ruby模块上调用方法
我有以下Ruby代码:在Ruby模块上调用方法,ruby,Ruby,我有以下Ruby代码: module MyModule class MyClass def self.my_method end end end 要调用myu方法,我输入MyModule::MyClass.myu方法。我想在模块本身上为my_方法编写一个包装: MyModule.my_method 这可能吗?您可以直接在模块内部定义方法 module MyModule def self.my_method puts "Hi I am #{self}"
module MyModule
class MyClass
def self.my_method
end
end
end
要调用myu方法
,我输入MyModule::MyClass.myu方法
。我想在模块本身上为my_方法
编写一个包装:
MyModule.my_method
这可能吗?您可以直接在模块内部定义方法
module MyModule
def self.my_method
puts "Hi I am #{self}"
end
end
MyModule.my_method #=> Hi I am MyModule
简单方法:
module MyModule
def self.my_method(*args)
MyModule::MyClass.my_method(*args)
end
end
更难的方法:
使用元编程为所有情况编写一个函数(如attr\u accessor)。我不确定您想要实现什么,但是:如果您将其作为常规方法并使用module\u函数对其进行修改,您将能够以您选择的任何方式调用它
#!/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"
我想我现在知道为什么它以前不起作用了:我在一个文件(my_module.rb)中声明了MyModule.my_方法,在另一个文件(my_class.rb)中声明了MyModule::MyClass.my_方法。当我将上述方法放入我的_class.rb中时,MyModule.my_方法起作用了!更简单的方法:要求“可转发”。在您的情况下,您可以在模块上调用您的方法吗?在我的方法之前你不需要赛尔夫吗?@Jwan622我已经试着改进我的答案了。它现在回答你的问题了吗?更好的方法是什么?my_方法还是模块功能:my_方法?对我来说,这两件事都很重要job@KargWare
def self.my_方法
创建一个只能使用MyModule.my_方法
调用的方法。使用module\u函数:my\u方法
创建一个方法,该方法可以使用MyModule.my\u方法
,或“包含我的模块的\u类的实例\u.my\u方法”调用`