Florian Gilcher
5/23/2008 10:20:00 AM
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
As far as i know, this is because local variables have a lexical scope.
In my experience, the parser treats everything that was not mentioned
as a
local variable before a method call and the runtime doesn't check
whether
it is a variable.
This also explains why IRB works differently, as every statement is
compiled
as a single statement.
Because of this, it is also impossible to assume the existance of
local variables
when executing a Proc in a certain context. (without considering hefty
AST-Hacking
with ruby2ruby).
Regards,
Florian Gilcher
On May 23, 2008, at 11:13 AM, Heesob Park wrote:
> 2008/5/23 Andrew Mitchell <amitchell@ttcent.com>:
>> Christopher J. Bottaro wrote:
>>> In other words, why can't I do this?
>>>
>>> def f(b)
>>> eval("x = 10", b)
>>> end
>>>
>>> f(binding)
>>> puts "x = #{x}"
>>>
>>> Is there any way to make that code work (besides obviously setting x
>>> to something before calling f).
>>>
>>> Thanks.
>>
>> Worked for me.
>>
>> Dios:~ andrewmitchell$ irb
>>>> def f(b)
>>>> eval("x=10", b)
>>>> end
>> => nil
>>>> f(binding)
>> => 10
>>>> puts "x = #{x}"
>> x = 10
>> => nil
>>>>
> But it works only in irb.
>
> Regards,
>
> Park Heesob
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
iEYEARECAAYFAkg2mlsACgkQJA/zY0IIRZblSQCcD4TmWh+ebQ0bF31AZw76wfoq
eN4Ani+na9Sg2SQaN9aGMFS73f8xKOVs
=zFM7
-----END PGP SIGNATURE-----