[#89806] [Ruby trunk Bug#15306] Generate prelude.c using miniruby — v.ondruch@...
Issue #15306 has been reported by vo.x (Vit Ondruch).
3 messages
2018/11/15
[ruby-core:89673] [Ruby trunk Bug#15274][Closed] Reflection does not report methods defined only in refinements
From:
matz@...
Date:
2018-11-01 14:15:35 UTC
List:
ruby-core #89673
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>