Project

General

Profile

Bug #11283

Updated by nepalez (Andrew Kozin) almost 9 years ago

That is how it works: 

     module Test 
       def self.build(&block) 
         klass = Class.new(Object) 
         klass.__send__(:define_method, :foo) 
         klass.__send__(:define_method, :bar) 
         klass 
       end 
     end 

     Tested = Test.build { :foo } 
     # warning: tried to create Proc object without a block 
     # => Tested 
     Tested.new.foo 
     # => :foo 
     Tested.new.bar 
     # => :foo 

 The block is assigned to all on calls to `:define_method` via `Object#__send__` invocations of `__send__` implicitly, while it wasn't asked to. 

 The behaviour is tested under MRI 1.9.3, 2.0, 2.1, 2.2, ruby-head. Exceptions are raised by Rbx and Jruby interpreters. 

 For the context look at this thread https://github.com/mbj/mutant/issues/356

Back