2010-08-06 14 views
14

He lo siguiente en el archivo de a.rb:descargar una clase de rubí

require foo 

y necesito para descargar foo, para cargar el foo de b.rb, c.rb y otros archivos.

¿Cómo puedo hacer?

+0

lo que es foo, y por qué tener clases con el mismo nombre haciendo cosas diferentes en diferentes archivos? – Doon

+0

en a.rb: clase Foo ... fin Lo necesito porque tengo que ejecutar Foo.bar en cada archivo rb, y no puedo editar archivos rb. – tapioco123

+0

es cada Foo.bar diferente? o son los mismos Foo? – Doon

Respuesta

17
Object.send(:remove_const, :Foo) 

suponiendo que tu clase se llama Foo.

+1

Esto funciona sólo una vez .. – tapioco123

+0

IRB (principal): 002: 0> require 'tiempo de espera' => true IRB (principal): 004: 0> Object.send (: remove_const,: Tiempo de espera) => Timeout irb (main): 005: 0> require 'timeout' => false – tapioco123

+0

mhh, sí, porque requieren comprobaciones si ya ha cargado esa lib, quizás necesites usar 'load' en lugar de' requiere' ... ¿por qué necesita descargar esa const de todos modos? ¿no puedes usar módulos o algo para protegerlos? PD: necesita agregar la extensión de archivo en 'load' – lwe

2

No estoy seguro acerca de la parte de descarga, pero al usar load en lugar de require siempre volveré a cargar el archivo. Sin embargo, cuando use carga necesitará incluir el .rb para que en su caso sea load 'foo.rb'.

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

Kernel#load docs
Kernel#require docs

+0

El problema con esto es si define una variable de instancia dentro de una clase, carga el archivo y luego elimina la variable de instancia y luego carga el archivo nuevamente, la instancia la variable aún existe a pesar de que la eliminó. La razón se debe a que cuando define una clase dos veces, la segunda definición se agrega a lo que ya existe, en lugar de redefinirlo por completo. –

+0

En un entorno de producción que no debería detenerse, esto permitiría el acceso a los métodos que estaban destinados a ser eliminados de la clase y "recargados" utilizando carga –

Cuestiones relacionadas