Ho un file esterno: path_to_external_file.rb
con una certa definizione della classe:Caricamento di file esterni all'interno di un/modulo di classe
class A
some_definitions
end
E voglio caricare che all'interno del modulo B
modo che la classe A
sopra definito può essere definito come B::A
. Ho provato:
class B
load('path_to_external_file.rb')
end
ma A
è definito nell'ambiente principale, non in B
:
A #=> A
B.constants # => []
Come posso caricare i file esterni all'interno di una certa classe/modulo?
Modifica Dovrei leggere i file esterni come stringhe, e valutarle nell'ambito Class.new{...}
, e include
quella classe all'interno B
?
a quale fine? Perché non puoi usare direttamente la classe A?Stai ottenendo qualche beneficio dalla modularizzazione? 'load' e' require' non caricheranno effettivamente una classe in un modulo, caricheranno semplicemente il codice sorgente, quindi le classi sono definite esattamente come sono nel file. Non sei sicuro del motivo per cui vorresti farlo? – brad
@brad Perché questi file esterni devono essere scritti dagli utenti e possono essere nominati arbitrari. Se definisco queste classi all'interno dell'ambiente principale, rovineranno lo spazio dei nomi. – sawa
Attenzione alla manomissione di altri spazi dei nomi tramite 'ObjectSpace # each_object'. – Reactormonk