这是 bar.rb :
module Bar
end
现在,在 foo.rb 中,我希望将其作为Foo
的子模块包含在内。我试过这个
module Foo
load './bar.rb'
end
但这只是加载 bar.rb ,就好像它在全局命名空间中一样。使用上面的代码:
::Bar # => Bar
Foo::Bar # => NameError: uninitialized constant Foo::Bar
我正在寻找一种从模块上下文中加载文件的方法,以便切换上述结果 - Foo::Bar
已定义,但不是::Bar
。基本上,它的结果类似于代码是这样的:
module Foo
module Bar
end
end
::Bar # => NameError: uninitialized constant Bar
Foo::Bar # => Foo::Bar
这可能吗?我正在使用Ruby 1.9.3
答案 0 :(得分:2)
想出来,答案是使用eval
:
module Foo
eval IO.read('./bar.rb'), binding
end
::Bar # => NameError: uninitialized constant Bar
Foo::Bar # => Foo::Bar
只需将文件作为字符串加载,并使用本地绑定进行评估。