Utilisation de la valeur d'une variable comme un autre nom dans les variables Ruby
-
22-09-2019 - |
Question
Je viens juste de commencer à apprendre Ruby et j'ai écrit un programme qui génère des nombres et les attribue aux variables @one, @two, @three etc. L'utilisateur peut alors spécifier une variable à changer en entrant son nom (par exemple un). Je dois alors faire quelque chose comme '@ [valueofinout] = asd. Comment est-ce que je fais cela, et est-il une meilleure façon que la façon dont je pense semble de se décourager? J'ai trouvé
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
mais je ne comprends pas complètement pourquoi la deuxième ligne est nécessaire. Dans mon cas, devrais-je utiliser quelque chose comme
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
La solution
Utilisation instance_variable_set
( rubydoc )
instance_variable_set("@" + varname, value)
Dans la plupart des cas cependant, vous devez séparer vos normales des variables Ruby à partir des variables de votre utilisateur interagit avec. Que diriez-vous la création d'une table de hachage des variables utilisateur, par exemple.
@uservars = { 'one' => 1, 'two' => 2 }
two = @uservars['two'] # Look up 'two' variable
varname = "myvar"
@uservars[varname] = 5 # Set a variable by name
value = @uservars[varname] # Get a variable by name
Autres conseils
Les variables d'instance peuvent être récupérées par cette méthode:
input = instance_variable_get("@one")
Après cela, dans votre cas, vous aurez input
égal à "21".