>>>>> "S" == Szymon Drejewicz <drejewic / wsisiz.edu.pl> writes:
S> eval("name='Alice'", MAIN_BINDING)
S> puts name
Like have said matz the problem is with this
svg% cat b.rb
#!/usr/bin/ruby
def name
"a nice method with a nice name"
end
eval("name='Alice'")
puts name
svg%
svg% b.rb
a nice method with a nice name
svg%
because at compile time, the local variable `name' was not defined ruby
has compiled the script to make a call to the method #name
S> it just means "evaluate this command and execute it in main block..."
yes, this is what do ruby but it do it at *runtime* when
puts name
is interpreted at *compile* time.
This is at compile time, that ruby resolve `name' as
*) reference to a local variable (if it was previously found a variable
with this name)
*) *OR* a method call (if it don't exist a variable with this name)
and in your example at *compile* time the variable `name' don't exist
S> I know that is not so easy, but what's wrong with that? Just want to write
S> self-writing code :-)
Don't make the error of a P language : an hash is really appropriate in
your case and it's perhaps the best solution
Guy Decoux