From: Csaba Henk Date: 2005-01-29T08:50:53+09:00 Subject: Proc rebinding In ruby there is such a thing as rebinding a proc object, as the example below shows: ##### class Foo def initialize @name = "anna" end @@hello = proc{ puts "hello #{@name}" } define_method :hello, @@hello end f=Foo.new f.hello class Foo; @@hello[]; end #### When you run the above, it writes: hello anna hello A Proc obejct carries its binding with itself (ie. is a closure), as it is well known. When @@hello was created, it did not know any @name. But then it was passed to define_method, and the resulting method "hello" can find @name in the instances. That is, ruby altered the bindings of (some kind of copy of) @@hello, and only after that has it been attached as a method. (Or rather, the binding is altered upon instantiation?) But all of this happened under the hood. What do you think of an explicit way of altering method bindings? I ask it because I could have made good use of that now (I tell the concrete example, is someone is interested). When one works with a bunch of anonymous processes, it's not handy/feasible to make them methods just for getting the binding changed. * Would it be useful? * A few lines of C which does it? * Is it possible with EvilRuby? * Is something like this planned (has it been discussed)? Csaba