From: 0x0dea+redmine@... Date: 2015-11-05T02:39:47+00:00 Subject: [ruby-core:71342] [Ruby trunk - Bug #11655] Can't refine Object.const_missing Issue #11655 has been updated by D.E. Akers. Nobu? Given the behavior observed above, I must maintain that this is a bug worth reopening. If I am mistaken in that conclusion, could you please take a moment to clarify your assertion that the Refinements spec prohibits implicit invocation? Thank you in advance for your time and patience. ---------------------------------------- Bug #11655: Can't refine Object.const_missing https://bugs.ruby-lang.org/issues/11655#change-54713 * Author: D.E. Akers * Status: Rejected * Priority: Normal * Assignee: * ruby -v: ruby 2.3.0dev (2015-11-04 trunk 52451) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- ```ruby TracePoint.new(:c_call) { |tp| if tp.method_id == :const_missing puts "top-level const_missing is #{tp.self}'s" end }.enable { Foo rescue 1 } # => top-level const_missing is Object's module M refine Object.singleton_class do def const_missing c 'Explicit invocation works.' end def new 'Can refine other singleton methods.' end end end using M puts Object.const_missing :Foo # => Explicit invocation works. Foo rescue p $! # => # def Object.const_missing c 'So does direct definition.' end puts Foo # => So does direct definition. puts Object.new # => Can refine other singleton methods. ``` Is it a bug? -- https://bugs.ruby-lang.org/