From: "trans (Thomas Sawyer)" Date: 2012-04-02T06:05:49+09:00 Subject: [ruby-dev:45486] [ruby-trunk - Feature #6241] Module#method_defined? with inherited flag Issue #6241 has been updated by trans (Thomas Sawyer). I think this is certainly a good idea. But I want to also point out that it's not always ideal either b/c #method_defined? reports false for private/protected methods. So in cases where the method in question might have known visibility one would have to do: if method_defined?(:foo) or private_method_defined?(:foo) or protected_method_defined?(:foo) which sucks. Of course, this has always been an issue with #instance_methods too. Perhaps now that named parameters are coming into their own, the interface should be modified to handle options? method_defined?(:foo, all: true, inherited: false) ---------------------------------------- Feature #6241: Module#method_defined? with inherited flag https://bugs.ruby-lang.org/issues/6241#change-25575 Author: nobu (Nobuyoshi Nakada) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: 2.0.0 =begin Currently (({Module#method_defined?})) does not accept "(({inherited}))" flags as (({Module#instance_methods})) and others. To tell if a method is defined at an exact class/module, we have to use bad idiom: mod.instance_methods(false).include?(:foo) So I propose to let (({method_defined?})) and etc accept the flag. =end -- http://bugs.ruby-lang.org/