2010-08-06 10 views
14

Ho il seguente nel file a.rb:scaricano una classe rubino

require foo 

e ho bisogno di scaricare i foo, per caricare il foo da b.rb, c.rb e altri file.

Come posso fare?

+0

ciò che è foo, e perché hai classi con lo stesso nome fare cose diverse in file diversi? – Doon

+0

in a.rb: classe Foo ... fine Mi serve perché devo eseguire Foo.bar in ogni file rb e non posso modificare i file rb. – tapioco123

+0

ogni Foo.bar è diverso? o sono gli stessi Foo? – Doon

risposta

17
Object.send(:remove_const, :Foo) 

assumendo che la classe sia denominata .

+1

Questo funziona solo una volta .. – tapioco123

+0

IRB (principale): 002: 0> require 'timeout' => true IRB (principale): 004: 0> Object.send (: remove_const,: Timeout) => Timeout irb (main): 005: 0> richiede 'timeout' => falso – tapioco123

+0

mhh, sì, perché richiede un controllo se ha già caricato quella lib, forse è necessario usare 'load' invece di' require' ... perché hai comunque bisogno di scaricare quel const? non puoi usare moduli o altro per proteggerli? PS: è necessario aggiungere l'estensione del file in 'load' – lwe

2

Non sono sicuro della parte di scarico, ma utilizzando load anziché require ricaricherà sempre il file. Tuttavia, quando si utilizza il carico, sarà necessario includere il file .rb, nel qual caso sarebbe load 'foo.rb'.

Vedi http://www.fromjavatoruby.com/2008/10/require-vs-load.html

Kernel#load docs
Kernel#require docs

+0

Il problema con questo è se si definisce una variabile di istanza all'interno di una classe e si carica il file, quindi si rimuove la variabile di istanza e quindi si carica di nuovo il file, l'istanza la variabile esiste ancora anche se l'hai rimossa. Il motivo è perché quando si definisce una classe due volte, la seconda definizione si aggiunge a ciò che già esiste, piuttosto che ridefinirlo completamente. –

+0

In un ambiente di produzione che non dovrebbe essere arrestato, ciò consentirebbe l'accesso ai metodi che erano stati progettati per essere cancellati dalla classe e "ricaricati" usando il carico –

Problemi correlati