我有一個外部文件中的外部文件: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