我有一个外部文件中的外部文件:path_to_external_file.rb
一些类定义:加载类/模块
class A
some_definitions
end
并且我想要加载模块B
使得上文所定义的类A
可被称为内如B::A
。我想:
class B
load('path_to_external_file.rb')
end
但A
在主环境中定义,而不是在B
:
A #=> A
B.constants # => []
我如何可以加载一些类/模块中的外部文件?
编辑 我应该读取外部文件作为字符串,并在Class.new{...}
对其进行评估,并include
内B
这门课吗?
到底是什么?为什么你不能直接使用A类?你是否从模块化中获得了一些好处? 'load'和'require'实际上不会将一个类加载到模块中,它们只是加载源代码,因此您的类将按照它们在文件中的定义。不知道你为什么想这样做? – brad
@brad由于这些外部文件要由用户编写,并且可以任意命名。如果我在主环境中定义这些类,它们会弄乱命名空间。 – sawa
小心通过'ObjectSpace#each_object'篡改其他名称空间。 – Reactormonk