【发布时间】:2018-02-27 19:37:38
【问题描述】:
目前我有一个这样的模块:
module MyModule
def A
end
.....
end
我有一个模型,我想将该方法 A 用作类方法。但是,问题是我只需要那个 A 方法。如果我扩展它,我会将其他不必要的类方法扩展到我的模型中。因此,我有没有办法像 MyModule.A 那样做某事,而无需像这样重写模块:
module MyModule
def A
...
end
def self.A
...
end
.....
end
如果我这样做,那就是在重复自己。我仍然觉得在 Rails 中有更好的方法。
【问题讨论】:
-
module_function :A:: 旁注:你不应该调用大写的方法;没有什么可以阻止你这样做,但是 ruby 有一个约定,在非常特殊的情况下使用大写名称,例如Kernel#Integer和 family。 -
冷,请您将我的问题作为单独的帖子重新回答,以便我接受您的回答?
-
extend只引入模块的实例方法(是的,这就是它们的名称,即使模块没有实例)作为类方法。extend对模块的类方法没有任何作用(include也没有)。因此,如果A(我们称它为a)是模块唯一的实例方法,则无事可做。
标签: ruby-on-rails ruby class oop