Как я могу использовать переменную в качестве имени переменной в Ruby? - PullRequest
5 голосов
/ 22 февраля 2010

Как заставить работать приведенный ниже код, чтобы оба puts отображали 1?

video = []
name = "video"

name[0] = 1

puts name[0] #gives me 1
puts video[0] #gives me nil

Ответы [ 3 ]

7 голосов
/ 22 февраля 2010

Вы можете заставить его работать, используя eval:

eval "#{name}[0] = 1"

Я настоятельно советую против этого все же. В большинстве ситуаций, когда вы думаете, что вам нужно сделать что-то подобное, вам следует использовать хэш-карту. Как:

context = { "video" => [] }
name = "video"
context[name][0] = 1
3 голосов
/ 22 февраля 2010

Здесь функция 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 () .

2 голосов
/ 22 февраля 2010

Прежде чем вы посмотрите на eval предложения, пожалуйста, прочитайте их:

(Да, речь идет о Perl по своей специфике. Думаю, что большее значение имеет независимо от языка)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...