From: Tim Pease Date: 2009-01-31T05:19:33+09:00 Subject: Re: binding in ruby1.9 On Jan 30, 2009, at 12:56 PM, Charles Oliver Nutter wrote: > Tim Pease wrote: >> Could someone explain why this code does not work in ruby1.9 and >> possibly provide a workaround. The end goal is to be able to pass a >> binding to an ERb result method that provides a limited set of >> variables to the ERb template evaluation. >> > cat a.rb >> obj = Object.new >> class << obj >> attr_accessor :foo >> end >> obj.foo = 'the foo method' >> eval "puts foo", obj.__send__(:binding) > > What an unusual feature to keep coming up. > > The contract of binding is that it returns a reification of the > caller's binding. Under 1.8, however, the behavior acted a bit > differently, using the "self" that binding was actually called > against. 1.9 has largely remedied this by always returning the > binding of the caller, even if you __send__(:binding) to another > object. > Okay, that explanation makes sense. My new implementation (following along with the Kernel docs) > cat a.rb obj = Object.new class << obj attr_accessor :foo def get_binding() binding; end end obj.foo = 'the foo method' eval "puts foo", obj.get_binding > ruby1.9 a.rb the foo method Thanks for the insight. Blessings, TwP