Feature #7836
Updated by nobu (Nobuyoshi Nakada) over 10 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