From: Florian Gilcher Date: 2008-05-23T19:20:17+09:00 Subject: Re: Why can't I define vars in caller's binding using eval? -----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 : >> 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-----