2010-02-27 4 views
1

Est-ce que j'ai créé une méthode supplémentaire pour ce type d'affectation? @@variable = @global_variable Pourquoi? Je veux que certaines variables qui contiennent des valeurs et des définitions soient accessibles tout au long de mon script et n'aient qu'un seul endroit de définition.Puis-je initialiser une variable de classe à l'aide d'une variable globale? (ruby)

@global_variable = 'test' 

class Test 

@@variable = @global_variable 

    def self.display 
    puts @@variable 
    end 
end 

Test.display #gives nil 

Répondre

8

Dans Ruby, les variables globales sont préfixés avec un $, pas @.

$global = 123 

class Foo 
    @@var = $global 
    def self.display 
     puts @@var 
    end 
end 

Foo.display 

sorties correctement 123.

Ce que vous avez fait est assigner une variable d'instance au module ou une catégorie d'objet (pas sûr); cette variable d'instance n'est pas dans la portée de la classe que vous avez définie.

+2

En fait, l'OP définit la variable d'instance sur "l'objet principal". – sepp2k

+0

@Mark Rushakoff: vous avez raison. Je vous remercie. Même '@@ variable = @@ global_variable' fonctionne. – Radek