Project

General

Profile

Actions

Bug #11655

closed

Can't refine Object.const_missing

Bug #11655: Can't refine Object.const_missing

Added by 0x0dea (D.E. Akers) almost 10 years ago. Updated almost 10 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.0dev (2015-11-04 trunk 52451) [x86_64-linux]
[ruby-core:71334]

Description

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 $!
# => #<NameError: uninitialized constant Foo>

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?


Related issues 1 (0 open1 closed)

Related to Ruby - Bug #11809: method_missing should not be refinedClosedshugo (Shugo Maeda)Actions

Updated by nobu (Nobuyoshi Nakada) almost 10 years ago Actions #1 [ruby-core:71336]

  • Status changed from Open to Rejected

It's a spec.
Refinements targets only explicit invocations.

Updated by 0x0dea (D.E. Akers) almost 10 years ago Actions #2 [ruby-core:71337]

Nobuyoshi Nakada wrote:

It's a spec.
Refinements targets only explicit invocations.

How does that square with the behavior observed below?

using Module.new {
  refine Object do
    def method_missing(*)
      42
    end
  end
}

p foo # => 42

Updated by 0x0dea (D.E. Akers) almost 10 years ago Actions #3 [ruby-core:71342]

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.

Updated by ktsj (Kazuki Tsujimoto) almost 10 years ago Actions #4

  • Related to Bug #11809: method_missing should not be refined added
Actions

Also available in: PDF Atom