From: Thomas Sawyer Date: 2012-02-07T22:34:53+09:00 Subject: [ruby-core:42398] [ruby-trunk - Feature #614] instance_method(ancestor) Issue #614 has been updated by Thomas Sawyer. This is a good feature idea. It was even assigned! The use case is specific b/c it is a specific example of use. What other kind can there be? I don't propose #conflict? as feature b/c I think THAT is too specific when this more generally applicable feature can easily be used to do it. This feature has other uses. In general this feature can be useful when there is a base class and one needs list of available methods up to that base class and not beyond. Perhaps you are delegating and only wish to delegate up to certain level. It can be difficult to think of examples for anything when you are not in the thick of it. For instance, off the top of your head give a good use case for using #instance_methods as it is? Don't be too specific ;) Anyway, I think this feature should not be rejected. I wish I had the know-how to do it myself, I would. But C turns my stomach in knots, which is why I code in Ruby :) Hmm... Too bad Ruby core has no bounty system. ---------------------------------------- Feature #614: instance_method(ancestor) https://bugs.ruby-lang.org/issues/614 Author: Thomas Sawyer Status: Rejected Priority: Normal Assignee: Yukihiro Matsumoto Category: core Target version: 2.0.0 =begin Currently Module#instance_methods takes a single argument, true or false, as to whether to include all ancestor's methods. However sometimes limiting the search at a particular ancestor is helpful. Currently this requires code along the lines of: meths = [] FooClass.ancestors[0..FooClass.ancestors.index(FooAncestor)].each do |anc| meths = meths | anc.instance_methods(false) end But it would be nice if we could simply use: instance_methods(FooAncestor) This change is, practically-speaking, backward compatible, since 'true' can be the same as 'Kernel', encompassing the entire ancestry. This change is applicable to the entire family of "methods" methods, including Kernel#methods. This change also helps eliminate the widely disliked true|false arguments. The particular use case that brought this to mind was trying to write a Module#conflict? method that lists the methods two modules or classes have in common, but excluding the methods that they share from a common ancestor. =end -- http://bugs.ruby-lang.org/