2010-05-18 24 views

risposta

15

Non è possibile accedere a un locale esterno all'ambito in cui è stato definito: il file in questo caso. Se vuoi le variabili che attraversano i confini dei file, rendili qualcosa di diverso dai locali. $foo, Foo e @foo funzioneranno tutti.

Se proprio non si vuole mettere alcun tipo di decorazione sul simbolo (perché non ti piace il modo in cui legge, forse), un hack comune è solo per definirlo come un metodo: def foo() "bar" end.

6

Ho accettato la risposta di Chuck perché è una soluzione decente, tuttavia in realtà ho usato un metodo diverso, che pensavo di condividere. È incredibilmente hacky, ma è stato utile per i miei scopi. Avevo bisogno di scansionare una directory con centinaia di file, ognuno dei quali creava un oggetto con lo stesso nome, e poi scaricava alcune informazioni su ogni oggetto. Per qualsiasi scopo serio e non temporaneo, I non lo raccomanderebbe!

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

puts foo # "bar" 
1

Di solito li definisco come metodi. Simile a ciò che ha detto nickf.

File1:

def static_path 
    '/opt/foo' 
end 

File2:

static_path 

Poi basta aggiungere una:

require_relative 'file path/file name' o require_relative 'file name' < = se i file sono in stessa directory.

al file in cui si desidera utilizzare il metodo/variabile.

Problemi correlati