Ruby 如何引用模块方法而不引用整个命名空间?
我有一个模块定义为:Ruby 如何引用模块方法而不引用整个命名空间?,ruby,ruby-on-rails-3.2,Ruby,Ruby On Rails 3.2,我有一个模块定义为: module MyApp module Utility def Utility.my_method 我想在其他几个类中使用该方法。但我不想打电话: MyApp::Utility.my_method 我宁愿打电话: Utility.my_method 这合理吗?我尝试了包含MyApp::Utility和包含MyApp,但没有成功。下面是一个将my_方法与类混合的示例: #myapp.rb module MyApp module Utility d
module MyApp
module Utility
def Utility.my_method
我想在其他几个类中使用该方法。但我不想打电话:
MyApp::Utility.my_method
我宁愿打电话:
Utility.my_method
这合理吗?我尝试了
包含MyApp::Utility
和包含MyApp
,但没有成功。下面是一个将my_方法与类混合的示例:
#myapp.rb
module MyApp
module Utility
def my_method
"called my_method"
end
end
end
听起来您希望在mixed-in方法上维护模块的名称空间。我见过这样做的尝试,但看起来相当混乱 如果需要my_方法具有名称空间,只需在方法名称中包含模块标识符即可:
module MyApp
module Utility
def util_my_method
"called my_method"
end
end
end
那么,只需指定您想要的任何别名,例如:
ShortNameGoesHere = MyApp::Utility
ShortNameGoesHere.my_method
相关的<代码>包含MyApp在Ruby 1.9.3中适用于我。然后我可以调用Utility.my_方法。但此处不使用Rails。当您包含模块时,其方法将成为对象的实例方法,因此您只需执行
包含MyApp::Utility
,然后执行我的方法
而不是实用程序。我的方法
在1.9.3中拒绝在类中工作。假设我的类名是MyClass,我最终会出现错误“未定义的常量MyClass::Utility。这应该没那么难。你是在尝试混入类方法还是实例方法?我希望它是类方法,但我已经尝试了两种方法。有关混入实例方法的示例,请参阅更新的答案。至于混合类内方法,请看
ShortNameGoesHere = MyApp::Utility
ShortNameGoesHere.my_method