2

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

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

# graph.rb
require 'foo_graph'
include foo

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

但是模块foo也在完全不相关的文件中使用,调用include可能会将更多的东西拉入全局命名空间,而不是我想要的。

有没有办法让我指定我想要使用哪些功能,include或者是否有替代方法来做我想做的事情?

4

1 回答 1

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
于 2012-11-05T15:49:35.690 回答