From: matz@... Date: 2018-11-01T14:15:35+00:00 Subject: [ruby-core:89673] [Ruby trunk Bug#15274][Closed] Reflection does not report methods defined only in refinements Issue #15274 has been updated by matz (Yukihiro Matsumoto). Status changed from Open to Closed It's intentional. Refinements are only seen from the lexical scope. That means reflection methods does not see any methods defined only in refinements. Matz. ---------------------------------------- Bug #15274: Reflection does not report methods defined only in refinements https://bugs.ruby-lang.org/issues/15274#change-74716 * Author: pitr.ch (Petr Chalupa) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- ~~~ ruby class C end module M refine C do def foo puts "C#foo in M" end end end using M c = C.new c.foo # prints "C#foo in M" c.send :foo p c.respond_to? :foo p c.methods.include?(:foo) p C.instance_methods.include?(:foo) p((c.method(:foo) rescue false)) __END__ Prints: C#foo in M C#foo in M false false false false ~~~ When the refinement M is used I think it would be less surprising if reflection methods (respond_to?, methods, method, instance_methods) report available methods including the ones coming from refinement. -- https://bugs.ruby-lang.org/ Unsubscribe: