On 12/16/06, Steve Midgley <> wrote:
> Hi Chris,
>
> def test
> static = "static"
> dyno = "_dynamic1"
> data = "store me"
> eval(static+dyno+"='"+data+"'")
> # call it via hard code
> #call it dynamically
> eval("puts "+static+dyno)
> end
>
> test
>
> I think this gets you where you want to be. For some reason, calling
> "static_dynamic1" hard coded wasn't working for me but if you need to
> go both ways, I'm sure it's possible.
I believe this is because local variable-ness is determined
statically, so it won't recognize 'a' as a local unless it was a local
before the eval. Hence:
g@crash:~$ ruby -e "eval('a = 1'); p a"
-e:1: undefined local variable or method `a' for main:Object (NameError)
g@crash:~$ ruby -e "a = nil; eval('a = 1'); p a"
1
evalling the 'a', OTOH, causes local variable-ness to be checked when
the eval is run, so:
g@crash:~$ ruby -e "eval('a = 1'); p a"
-e:1: undefined local variable or method `a' for main:Object (NameError)
g@crash:~$ ruby -e "eval('a = 1'); p eval('a')"
1
I know you were just answering the OP's question. I tend to think all
this evalling business should really be avoided to begin with, though.