2010-01-30 8 views

Répondre

7

Vous pouvez obtenir quelque chose de similaire en utilisant eval

x = "myvar" 
myvar = "hi" 
eval(x) -> "hi" 
5

Il est possible que pour les variables d'instance (et variables de classe):

class MyClass 
    def initialize 
    @varname = :"@hello" 
    instance_variable_set @varname, "world" 
    end 

    def greet 
    puts instance_variable_get(@varname) 
    end 
end 

MyClass.new.greet 
#=> "world" 

Pour les variables locales, vous devez utiliser eval.

+0

Y a-t-il un colon supplémentaire à la ligne 3? – btelles

+0

Oui, le signe deux-points équivaut à appeler to_sym sur un littéral de chaîne: convertissez-le en symbole. – molf

+0

IOW ':" abcdef "==" abcdef ".to_sym ==: abcdef', et vous pouvez aussi utiliser l'interpolation': "# {klazz} _ # {id}" == "# {klazz} _ # {id } ". to_sym'. – yfeldblum

Questions connexes