Project

General

Profile

Feature #8465

Updated by nobu (Nobuyoshi Nakada) almost 11 years ago

=begin 
 (({instance_eval})) instance_eval is a solution to evaluate a proc in the binding of another object 

 but it is not a solution for a (({Proc})) Proc that takes arguments 

 I propose that in order to suppor this use-case we need (({Proc#set_binding})) <#Proc>.set_binding 

 Example: 


   


 class BarFoo 
     
   def foo(arg) 
       
     "bar #{arg}" 
     
   end 
     
   def puts_a_foo 
       
     Proc.new do |arg| 
         
       puts self.foo(arg) 
       end 
     end 
   end 

   
 end 

 class FooFoo 
     
   def foo(arg) 
       
     "foo #{arg}" 
     
   end 
     
   def foo_foo_proc 
       
     Proc.new{} 
     end 
   end 

   
 end 

 foo_putter = BarFoo.new.puts_a_foo 

   

 foo_putter.call("blah") 
   
 # bar blah 

   

 FooFoo.new.instance_eval(&foo_putter) 
   
 #foo #<FooFoo:0x007ff0b903f9b0> 

   

 foo_putter.binding.eval("puts self.foo('blah')") 
   
 # bar blah 

   

 FooFoo.new.foo_foo_proc.binding.eval("puts self.foo('blah')") 
   
 # foo blah 

   

 #I expect... 
   
 foo_putter.set_binding(FooFoo.new.foo_foo_proc.binding) 
   
 foo_putter.call("blah") 
   
 #to output: 
   
 # foo blah 
 =end 
 foo

Back