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
Était-ce utile?

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".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top