ruby-on-rails - 有没有办法在模块中使用类方法而不在 Rails 中扩展它?

标签 ruby-on-rails ruby class oop

目前我有这样一个模块:

module MyModule
  def A

  end

  .....

end

我有一个模型,我想将该方法 A 用作类方法。但是,问题是我只需要那个 A 方法。如果我扩展它,我会将其他不必要的类方法扩展到我的模型中。因此,有没有办法让我像 MyModule.A 那样做某事而无需像这样重写模块:

module MyModule
  def A
    ...
  end

  def self.A
    ...
  end

  .....

end

如果我那样做,有点重复我自己。我仍然觉得在 Rails 中有更好的方法来做到这一点。

最佳答案

使用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"

关于ruby-on-rails - 有没有办法在模块中使用类方法而不在 Rails 中扩展它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46293304/

相关文章:

class - 在 ANT 中制作 JAR 时如何有条件地包含 list 选项

java - 实现比较方法的 Comparable 接口(interface)的 Widget 类

mysql - Ruby on Rails 需要 libmysqlclient.so.20,但我有 21...需要降级吗?

ruby-on-rails - 尝试在 Ubuntu 12.04 下安装 json 时出错

ruby-on-rails - RoR 中 <% %> 和 <%= %> 之间的差异

ruby - RSpec 不允许待处理的方法

ruby-on-rails - ActiveRecord 查询 : Get Distinct Users from Posts in Category

ruby - 在文本中查找关键字,然后打印导致单独关键字的单词

arrays - 如何创建随机掩码数组?

delphi - 如何确保所有属性都已重置