Project

General

Profile

Feature #7836

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

=begin 
 See the following code: 

 ~~~ruby 
 

   module P 
   
     def hello 
     
       puts "from P" 
       super 
     super end 
   end 
 end 

 

   class A 
   
     def hello 
     
       puts 'from A' 
   
     end 

   

     prepend P 
 
   end 

 

   A.instance_method(:hello).source_location == P.instance_method(:hello).source_location    #=> true 
 ~~~ 

 ## == Discussion 

 Since `A.instance_method(:hello)` (({A.instance_method(:hello)})) effectively returns `P.instance_method(:hello)` (({P.instance_method(:hello)})) it is impossible to get an `UnboundMethod` (({UnboundMethod})) object to the original `A#hello` (({A#hello})) method. 

 Tools like [Pry](http://pryrepl.org) ((<[Pry]|URL:http://pryrepl.org>)) need to access `UnboundMethod` (({UnboundMethod})) objects to every active method in the system for debugging purposes. 

 ## == Possible solution 

 Simply allow `instance_method()` (({instance_method()})) to take a second boolean parameter, indicating whether methods injected by prepended modules are to be included, it would default to true: 

 example: 

 ~~~ruby 
 

   A.instance_method(:hello) #=> same as P#hello 
 
   A.instance_method(:hello, false) #=> return strictly A#hello 
 ~~~ 

 =end 

Back