Ruby:如何在IRB中将命名空间类包含到全局命名空间中

时间:2014-05-07 14:17:27

标签: ruby module namespaces irb

出于某种原因,我想使用命名空间的类/模块,因为它们位于IRB的全局命名空间中。

例如,我在其中有模块MyCore和类MyUser。是否有任何机制或挂钩让IRB以MyCore::MyUser的方式包含MyUser.new,而不用MyCore作为前缀?

4 个答案:

答案 0 :(得分:4)

你可以简单地做

include MyCore

myUser = MyUser.new

使用include将模块中的所有常量添加到当前类中。

class WhereIWantToIncludeMyCore
  include MyCore

  def initialize
    user = MyUser.new
  end
end

如果您希望能够无处不在,则可以将其添加到class的范围之外,Object将其包含在{{1}}中。

答案 1 :(得分:0)

您可以执行类似

的操作
MU = MyCore::MyUser

并使用您为后续调用定义的别名。

答案 2 :(得分:0)

你可以随时

MyUser = MyCore::MyUser

如果您想获得所有包含的模块/类:

MyCore.constants.each do |const|
  Object.const_set(const, MyCore.const_get(const))
end

答案 3 :(得分:0)

我研究了这个问题,我发现了talking& scripts

但我认为这个宝石wrap_in_module做了最佳实践

wrap_in_module

希望它有所帮助。