Thomas Sawyer | 3 Oct 15:37
Favicon

[ruby-core:19120] [Feature #614] instance_method(ancestor)

Feature #614: instance_method(ancestor)
http://redmine.ruby-lang.org/issues/show/614

Author: Thomas Sawyer
Status: Open, Priority: Normal
Category: core

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.

----------------------------------------
http://redmine.ruby-lang.org


Gmane