2010-05-18 12 views

Respuesta

15

No se puede acceder a un local fuera del alcance que se definió en el archivo en este caso. Si desea variables que crucen los límites de los archivos, conviértelos en cualquier cosa que no sean locales. $foo, Foo y @foo funcionarán todos.

Si realmente no desea poner ningún tipo de decoración en el símbolo (porque no le gusta la forma en que se lee, tal vez), un truco común es simplemente definirlo como un método: def foo() "bar" end.

6

He aceptado la respuesta de Chuck porque es una solución decente, sin embargo, en realidad utilicé un método diferente, que pensé que compartiría. Es increíblemente hacky, pero fue útil para mis propósitos. Necesitaba escanear un directorio con cientos de archivos, cada uno de los cuales creaba un objeto con el mismo nombre, y luego volcaba información sobre cada objeto. Para cualquier propósito serio y no temporal, I no lo recomendaría!

foo = "" 
eval File.open('inc.rb').read 

puts foo # "bar" 
1

Normalmente los defino como métodos. Similar a lo que dijo nickf.

Fichero 1:

def static_path 
    '/opt/foo' 
end 

archivo2:

static_path 

A continuación, sólo añadir una:

require_relative 'file path/file name' o require_relative 'file name' < = si los archivos están en el mismo directorio.

al archivo que desea utilizar el método/variable en.

Cuestiones relacionadas