Как я могу сделать код ниже работы, так что оба puts
дисплей 1
?Как использовать переменную в качестве имени переменной в Ruby?
video = []
name = "video"
name[0] = 1
puts name[0] #gives me 1
puts video[0] #gives me nil
Как я могу сделать код ниже работы, так что оба puts
дисплей 1
?Как использовать переменную в качестве имени переменной в Ruby?
video = []
name = "video"
name[0] = 1
puts name[0] #gives me 1
puts video[0] #gives me nil
Вы можете сделать его работу с помощью Eval:
eval "#{name}[0] = 1"
Я настоятельно советую против этого, хотя. В большинстве ситуаций, когда вы думаете, что вам нужно что-то делать, вы должны probaby использовать хэш-карту. Нравится:
context = { "video" => [] }
name = "video"
context[name][0] = 1
@ sepp2k: почему вы категорически против использования eval? – Radek
@ Radek: 3000-летний опыт работы со сломанными системами, такими как свинки; это классический запах кода, и это сделает ваш код трудно понять и сохранить. –
@ Radek: Во-первых, это главное отверстие безопасности, если вы используете пользовательский ввод. Для других hashmaps просто больше подходит для сопоставления имен переменных в значения. Для еще одного кода, который использует eval, может быть больно отлаживать. – sepp2k
Здесь функция 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)
Вот eval() doc.
Перед тем, как смотреть на eval
предложения, пожалуйста, пожалуйста, пожалуйста, прочитайте это:
(Да, это про Perl в их Специфика. Чем выше точка, тем выше, независимо от языка.)
Если вам действительно нужно, используйте 'eval()'. См. Ответ на http://stackoverflow.com/questions/2168666/is-it-possible-to-do-dynamic-variables-in-ruby – molf