2010-09-25 10 views
5

Decir que tengo un archivo llamado test1.rb con el siguiente código:variables de acceso en fuente de carga, mientras que en el IRB

my_array = [1, 2, 3, 4 5] 

Luego ejecutar IRB y obtener una pronta IRB y ejecutar "require 'test1' At. este punto estoy esperando para poder acceder a la my_array. Pero si trato de hacer algo así ...

puts my_array 

IRB me dice "my_array" no está definido. ¿hay una manera de acceder a "my_array"

+1

duplicado: http://stackoverflow.com/questions/2699324/ruby-irb-requires-and-scope –

Respuesta

8

como este:

def my_array 
    [1, 2, 3, 4, 5] 
end 
+0

Con esto se logran lo que quiero. gracias – iljkj

+0

Nota, si está haciendo algo más complicado que crear una matriz, puede configurar una variable de instancia local para contener el objeto resultante ... como mi "carga" inicializa una conexión a una API para la prueba, con las credenciales y todo, así que después de mi "carga" acabo de hacer api = my_api – TommyTheKid

1

No, no lo hay. Las variables locales siempre son locales para el ámbito en el que están definidas. Por eso se llaman variables locales, después de todo.

1

En IRB:

eval(File.read('myarray.rb'),binding) 

O usted podría drop to irb

+0

realmente esperaba que esto funcionaría pero todavía obtengo el error "variable local indefinida" – iljkj

+0

¿puede mostrar el código exacto con el que probó, o quizás un volcado de la sesión, porque esto funciona. – raggi

+0

en un archivo llamado "myarray.rb" tengo "my_array = (1..5) .to_a". luego en irb hago eval (File.read ('myarray.rb')) que da salida a "[1, 2, 3, 4, 5]". Eso está bien, pero quiero poder acceder a "my_array", pero no existe en la sesión actual de irb. – iljkj

2

También puede requerir la secuencia de comandos y acceder a esos datos en algunas otras maneras. No se puede acceder a una variable local, pero se puede acceder a estos otros tres tipos de datos dentro del alcance, de forma similar a la definición del método.

MY_ARRAY = [1, 2, 3, 4 5] #constant 
@my_array = [1, 2, 3, 4 5] #instance variable 
@@my_array = [1, 2, 3, 4 5] #class variable 
def my_array # method definition 
    [1, 2, 3, 4 5] 
end 
Cuestiones relacionadas