将包含的类附加到命名空间?

时间:2015-09-25 17:18:30

标签: ruby

我在文件Bar中有一个Ruby类models/bar.rb

class Bar
end

我的主程序文件中有一个Ruby模块Foo

module Foo
end

我想要/ load / autoload Bar,使其在Foo下命名,即:

module Foo
  autoload :Bar, 'models/bar.rb'
end

fb = Foo::Bar.new # yay!

但是,require / load / autoload找到的实体附加到全局命名空间。为了实现这一点,我必须编辑models/bar.rb并将该课程包装在module Foo .. end中。有没有办法做到这一点,而不必这样做?

1 个答案:

答案 0 :(得分:0)

没有。在正常文件加载下这是不可能的。 (如果您将文件models/bar.rb不是作为Ruby代码而是作为字符串读取,然后instance_eval读取Foo中的字符串,那么它就有可能。)