8
votes

Accéder aux variables des fichiers inclus dans Ruby

Comment accédez-vous des variables définies dans un fichier inclus?

# inc.rb
foo = "bar";


# main.rb
require 'inc.rb'
puts foo

# NameError: undefined local variable or method `foo' for main:Object


0 commentaires

3 Réponses :


15
votes

Vous ne pouvez pas accéder à un local à l'extérieur de la portée, il a été défini dans le fichier dans ce cas. Si vous souhaitez des variables qui croient les limites du fichier, faites-leur quelque chose que des locaux. $ foo , foo et @foo fonctionnera tous.

Si vous ne voulez vraiment pas mettre une sorte de décoration sur le symbole (parce que vous n'aimez pas la façon dont il se lit, peut-être), un piratage commun est juste pour le définir comme méthode: DEF FOO () "bar" fin .


1 commentaires

Dans quelle version rubis cela a changé? Je l'utilise donc depuis pour toujours avec vagabond config



6
votes

J'ai accepté la réponse de Chuck, car c'est une solution décente, mais j'utilisais effectivement une méthode différente, que je pensais partager. C'est incroyablement hacky, mais était utile à mes besoins. Je devais numériser un répertoire avec des centaines de fichiers, chacun d'entre eux créé un objet avec le même nom, puis vider certaines informations sur chaque objet. Pour tout objectif sérieux et non temporaire, je ne le feriez pas em> recommander cela!

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

puts foo # "bar"


0 commentaires

2
votes

Je les définis habituellement comme méthodes. Semblable à ce que Nickf a dit.

file1: xxx

fichier2: xxx

ajoutez simplement ajoutez un:

exiger_relative 'chemin de fichier / nom de fichier' ou nécessite_relative 'nom de fichier' <= si les fichiers sont dans la même répertoire.

au fichier que vous souhaitez utiliser la méthode / la variable dans.


0 commentaires