2010-09-25 21 views
5

que j'ai un fichier nommé test1.rb avec le code suivant:accéder aux variables dans la source chargée alors que dans irb

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

Alors je cours et obtenir irb une invite irb et exécuter « require « test1 » A. ce point, je me attends à pouvoir accéder my_array. Mais si j'essaie de faire quelque chose comme ...

puts my_array 

irb me dit « my_array » est non défini. Yat-il un moyen d'accéder à « my_array »

+1

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

Répondre

8

comme ceci:

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

Ce accomplit ce que je veux. merci – iljkj

+0

Notez, si vous faites quelque chose de plus compliqué que de créer un tableau, vous pouvez configurer une variable d'instance locale pour contenir l'objet résultant ... comme mon "load" initialise une connexion à une API pour tester, avec les informations d'identification et tout., donc après ma "charge" je fais juste api = my_api – TommyTheKid

1

Non, il n'y en a pas. Les variables locales sont toujours locales à la portée dans laquelle elles sont définies. C'est pourquoi elles sont appelées variables locales, après tout.

1

En irb:

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

Ou vous pourriez drop to irb

+0

j'espérais vraiment que cela fonctionnerait mais je reçois toujours "variable locale non définie" erreur – iljkj

+0

pouvez-vous montrer le code exact avec lequel vous avez testé, ou peut-être un vidage de la session, parce que cela fonctionne. – raggi

+0

dans un fichier appelé "myarray.rb" j'ai "my_array = (1..5) .to_a". puis dans irb je fais eval (File.read ('myarray.rb')) qui sort "[1, 2, 3, 4, 5]". C'est bien mais je veux alors pouvoir accéder à "my_array" mais il n'existe pas dans la session actuelle d'irb. – iljkj

2

Vous pouvez également demander votre script et l'accès à ces données quelques autres façons. Une variable locale n'est pas accessible, mais ces trois autres types de données peuvent être accédés dans la portée, similaire à la définition de la méthode.

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