Project

General

Profile

Actions

Bug #11655

closed

Can't refine Object.const_missing

Added by 0x0dea (D.E. Akers) about 9 years ago. Updated about 9 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 master - Bug #11809: method_missing should not be refinedClosedshugo (Shugo Maeda)Actions

Updated by nobu (Nobuyoshi Nakada) about 9 years ago

  • Status changed from Open to Rejected

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

Updated by 0x0dea (D.E. Akers) about 9 years ago

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) about 9 years ago

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.

Actions #4

Updated by ktsj (Kazuki Tsujimoto) almost 9 years ago

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

Also available in: Atom PDF

Like0
Like0Like0Like0Like0