Contents of variable as variable name

I know that sounds a bit crazy, but is there a way to do that?

···

--
Posted via http://www.ruby-forum.com/.

One way of doing it is:

irb(main):025:0> a = "foo"
"foo"
irb(main):026:0> eval "#{a}=1"
1
irb(main):027:0> foo
1

Although eval is normally discouraged and must be used sparingly.

···

On 7/15/07, Rob Kerfia <redct@openfish.info> wrote:

I know that sounds a bit crazy, but is there a way to do that?

Rob Kerfia said the following on 07/14/2007 11:10 PM:

I know that sounds a bit crazy, but is there a way to do that?

oh oh oh .. I asked this question and did a bit of experimentation a while back.

I found a blank spot in my wiki where I was supposed to have written it all down, but I guess I didn't get around to it. I just found and dumped some notes in just now.. maybe something there will help inspire you:

if eval isn't appropriate, then this snippet might work:

@ab = "pass"
puts instance_variable_get("@#{"a" + "b"}")

Don't do it. If you think you need to, it is indicative of bad design.
There are significant dangers involved. The following is about Perl rather
than Ruby, but the concept is the same:

http://perl.plover.com/varvarname.html
http://perl.plover.com/varvarname2.html
http://perl.plover.com/varvarname3.html

--Greg

···

On Sun, Jul 15, 2007 at 12:10:52PM +0900, Rob Kerfia wrote:

I know that sounds a bit crazy, but is there a way to do that?

Thanks for the reading. This helped me avoid learning a Bad habit.

This comment from the second document summed it up for me:
  The real problem is that if your string contains something
unexpected, it will sabotage a totally unrelated part of the program,
and then you will have one hell of a time figuring out the bug.

Now the next time I itch to do something like this I'll explore using
a hash instead.

···

On 7/15/07, Gregory Seidman <gsslist+ruby@anthropohedron.net> wrote:

On Sun, Jul 15, 2007 at 12:10:52PM +0900, Rob Kerfia wrote:
> I know that sounds a bit crazy, but is there a way to do that?

Don't do it. If you think you need to, it is indicative of bad design.
There are significant dangers involved. The following is about Perl rather
than Ruby, but the concept is the same:

Why it's stupid to `use a variable as a variable name'
Why it's stupid to `use a variable as a variable name', Part II
Why it's stupid to `use a variable as a variable name', Part III