1

我有一个模块定义为:

module MyApp
  module Utility
    def Utility.my_method

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

MyApp::Utility.my_method

我宁愿打电话:

Utility.my_method

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

4

2 回答 2

2

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

ShortNameGoesHere = MyApp::Utility
ShortNameGoesHere.my_method
于 2012-12-31T18:15:42.793 回答
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 被命名空间,您可以简单地在方法名称中包含一个模块标识符:

module MyApp
  module Utility
    def util_my_method
      "called my_method"
    end
  end
end
于 2012-12-31T17:43:31.360 回答