将特定方法从模块中拉入ruby中的全局命名空间

时间:2012-11-05 15:42:15

标签: ruby

是否可以通过专门命名函数(也就是整个模块)将函数从模块中提取到ruby中的全局命名空间?

我有一个最初没有使用模块的模块,我想将类/方法移动到一个模块中,但仍然保留一个模块,该模块将具有全局级别的所有内容以实现兼容性。到目前为止,我有这个。

# graph.rb
require 'foo_graph'
include foo

# foo_graph.rb
module foo
    # contents of the old graph.rb
end

但是模块foo也在完全不相关的文件中使用,并且调用include可能会将更多内容输入到全局命名空间中。

我有没有办法指定我想用include引入哪些功能,还是可以选择做我想做的事情?

1 个答案:

答案 0 :(得分:2)

使用子模块。

module Foo
  module Bar
    def bar_method; end
  end
  include Bar

  module Baz
    def baz_method; end
  end
  include Baz
end

# only include methods from Bar
include Foo::Bar

bar_method
#=> nil

baz_method
#=> NameError: undefined local variable or method `baz_method' for main:Object

include Foo

# include all methods from Foo and submodules
baz_method
#=> nil