目前我有一个这样的模块:
module MyModule
def A
end
.....
end
我有一个模型,我想将方法A用作类方法。然而,事情是我只需要一个方法。如果我扩展它,我会将其他不必要的类方法扩展到我的模型中。因此,有没有办法让我像MyModule.A那样做,而不是像这样重写模块:
module MyModule
def A
...
end
def self.A
...
end
.....
end
如果我这样做的话,有点重复自己。我仍然觉得在Rails中有更好的方法。
答案 0 :(得分:8)
使用Module#module_function
使单个函数成为模块函数:
module M
def m1; puts "m1"; end
def m2; puts "m2"; end
module_function :m2
end
或:
module M
def m1; puts "m1"; end
module_function # from now on all functions are defined as module_functions
def m2; puts "m2"; end
end
M.m1 #⇒ NoMethodError: undefined method `m1' for M:Module
M.m2 #⇒ "m2"
答案 1 :(得分:1)
是的,您可以将其定义为 module_function ,然后您应该可以使用模块名称访问它。
例如:
module Mod
def my_method
100
end
def self.my_method_1
200
end
module_function :my_method
end
Mod.my_method
# => 100
Mod.my_method_1
# => 200
注意:无需在module_function 中添加自定义方法,可以直接访问它们。但是,没有自我定义的方法需要它