2010-09-25 13 views
5

dire che ho un file chiamato test1.rb con il seguente codice:di accesso a variabili di origine caricato mentre nel IRB

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

Poi corro IRB e ottenere un prompt IRB e fuggi "require 'test1' A. questo punto mi aspetto di essere in grado di accedere my_array. Ma se provo a fare qualcosa di simile ...

puts my_array 

IRB mi dice "my_array" non è definito. c'è un modo per accedere a "my_array"

+1

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

risposta

8

come questo:

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

Questo compie quello che voglio. grazie – iljkj

+0

Nota, se stai facendo qualcosa di più complicato della creazione di un array, potresti voler impostare una variabile di istanza locale per contenere l'oggetto risultante ... come il mio "carico" inizializza una connessione a un'API per testare, con le credenziali e tutto il resto., quindi dopo il mio "carico" faccio semplicemente api = my_api – TommyTheKid

1

No, non c'è. Le variabili locali sono sempre locali rispetto all'ambito in cui sono definite. Ecco perché sono chiamate variabili locali, dopotutto.

1

In IRB:

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

Oppure si potrebbe drop to irb

+0

speravo davvero che funzionasse, ma ottengo ancora l'errore "variabile locale indefinita" – iljkj

+0

puoi mostrare il codice esatto che hai provato, o forse un discarica della sessione, perché funziona. – raggi

+0

in un file chiamato "myarray.rb" ho "my_array = (1..5) .to_a". quindi in irb i do eval (File.read ('myarray.rb')) che emette "[1, 2, 3, 4, 5]". Questo è buono ma voglio poter accedere a "my_array" ma non esiste nella sessione corrente di irb. – iljkj

2

È possibile anche richiedere lo script e l'accesso che i dati in pochi altri modi. Non è possibile accedere a una variabile locale, ma è possibile accedere a questi altri tre tipi di dati nell'ambito dell'oscilloscopio, in modo simile alla definizione del metodo.

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 
Problemi correlati