Come posso far funzionare il codice qui sotto, in modo che sia puts
visualizzare 1
?Come posso usare una variabile come nome di variabile in Ruby?
video = []
name = "video"
name[0] = 1
puts name[0] #gives me 1
puts video[0] #gives me nil
Come posso far funzionare il codice qui sotto, in modo che sia puts
visualizzare 1
?Come posso usare una variabile come nome di variabile in Ruby?
video = []
name = "video"
name[0] = 1
puts name[0] #gives me 1
puts video[0] #gives me nil
È possibile farlo funzionare utilizzando eval:
eval "#{name}[0] = 1"
mi consiglia vivamente contro questo però. Nella maggior parte dei casi in cui pensi di dover fare qualcosa del genere, dovresti usare una hashmap. Come:
context = { "video" => [] }
name = "video"
context[name][0] = 1
@ sepp2k: perché sei fortemente contrario all'uso di eval? – Radek
@Radek: 3000 anni di esperienza con sistemi rotti come la parotite; questo è un classico odore di codice e renderà il tuo codice difficile da capire e da mantenere. –
@Radek: Per prima cosa, è un grosso buco di sicurezza se si evalano gli input dell'utente. Perché un'altra hashmap è semplicemente più adatta per mappare da nomi di variabili a valori. Per l'ennesimo, il codice che utilizza eval può essere un problema per il debug. – sepp2k
Qui la funzione 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)
Ecco lo eval() doc.
Prima si guardano le eval
suggerimenti, per favore, per favore, si prega di leggere questi:
(Sì, quelli sono su Perl nella loro Specifici. Il punto più grande tiene a prescindere dalla lingua, penso.)
Se proprio devi, usa 'eval()'. Vedere la risposta a http://stackoverflow.com/questions/2168666/is-it-possibile-da-do-dinamica-variabile-in-ruby – molf