Radek
Radek

Reputation: 11121

How can I use a variable as a variable name in Ruby?

How can I make the code below work, so that both puts display 1?

video = []
name = "video"

name[0] = 1

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

Upvotes: 5

Views: 347

Answers (3)

Telemachus
Telemachus

Reputation: 19725

Before you look at the eval suggestions, please, please, please read these:

(Yes, those are about Perl in their specifics. The larger point holds regardless of the language, I think.)

Upvotes: 2

lillq
lillq

Reputation: 15389

Here the eval function.

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)

Here is the eval() doc.

Upvotes: 3

sepp2k
sepp2k

Reputation: 370445

You can make it work using eval:

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

I strongly advise against that though. In most situations where you think you need to do something like that, you should probaby use a hashmap. Like:

context = { "video" => [] }
name = "video"
context[name][0] = 1

Upvotes: 7

Related Questions