¿Cómo puedo hacer que el siguiente código funcione, para que ambos puts
muestren 1
?¿Cómo puedo usar una variable como nombre de variable en Ruby?
video = []
name = "video"
name[0] = 1
puts name[0] #gives me 1
puts video[0] #gives me nil
¿Cómo puedo hacer que el siguiente código funcione, para que ambos puts
muestren 1
?¿Cómo puedo usar una variable como nombre de variable en Ruby?
video = []
name = "video"
name[0] = 1
puts name[0] #gives me 1
puts video[0] #gives me nil
Puede hacer que funcione usando eval:
eval "#{name}[0] = 1"
que muy encarecidamente que sin embargo. En la mayoría de las situaciones en las que piensas que debes hacer algo como eso, debes usar un hashmap. Me gusta:
context = { "video" => [] }
name = "video"
context[name][0] = 1
@ sepp2k: ¿por qué está en contra de usar eval? – Radek
@Radek: 3000 años de experiencia con sistemas rotos como paperas; este es un olor de código clásico, y hará que su código sea difícil de entender y mantener. –
@Radek: Por un lado, es un gran agujero de seguridad si evalúa la entrada del usuario. Para otros hashmaps son simplemente más adecuados para mapear desde nombres de variables a valores. Para otro más, el código que usa eval puede ser difícil de depurar. – sepp2k
Aquí la función eval.
video = [] #there is now a video called array
name = "video" #there is now a string called name that evaluates to "video"
puts eval(name) #prints the empty array video
name[0] = 1 #changes the first char to value 1 (only in 1.8.7, not valid in 1.9.1)
Aquí está el eval() doc.
Antes nos fijamos en las eval
sugerencias, por favor, por favor, lea los siguientes:
(Sí, esos son sobre Perl en su detalles. El punto más grande se mantiene independientemente del idioma, creo.)
Si realmente tiene que hacerlo, use 'eval()'. Consulte la respuesta a http://stackoverflow.com/questions/2168666/is-it-possible-to-do-dynamic-variables-in-ruby – molf