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?
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?
Object.send(:remove_const, :Foo)
assumendo che la classe sia denominata .
Questo funziona solo una volta .. – tapioco123
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
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
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
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. –
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 –
ciò che è foo, e perché hai classi con lo stesso nome fare cose diverse in file diversi? – Doon
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
ogni Foo.bar è diverso? o sono gli stessi Foo? – Doon