如何在不引用整个命名空间的情况下引用模块方法?

时间:2012-12-31 17:33:18

标签: ruby ruby-on-rails-3.2

我有一个模块定义为:

module MyApp
  module Utility
    def Utility.my_method

我想在其他几个类中使用该方法。但我不想打电话:

MyApp::Utility.my_method

我宁愿打电话:

Utility.my_method

这合理吗?我试过include MyApp::Utilityinclude MyApp无济于事。

2 个答案:

答案 0 :(得分:2)

好吧,只需指定您想要的任何别名,例如:

ShortNameGoesHere = MyApp::Utility
ShortNameGoesHere.my_method

答案 1 :(得分:0)

以下是将my_method混合到类中的示例:

#myapp.rb
module MyApp
  module Utility
    def my_method
      "called my_method"
    end
  end
end

#test.rb
require './myapp'
class MyClass
  include MyApp::Utility
end

if __FILE__ == $0 then
  m = MyClass.new
  puts m.my_method
end

听起来你想在混合方法中维护模块的命名空间。我已经看到过这样做的尝试(https://stackoverflow.com/a/7575460/149212),但它似乎很混乱。

如果您需要将my_method命名为namespace,则只需在方法名称中包含模块标识符:

module MyApp
  module Utility
    def util_my_method
      "called my_method"
    end
  end
end