It looks like const_missing is an instance method of Object. If so, why doesn’t this code work?
module Extensions
def const_missing(c)
puts c
end
end
class Object
include Extensions
end
NonExistent.new
In order to get it to function correctly, I have to change def const_missing to def Object.const_missing. Why?
This is just a consequence of the way method calls are resolved in Ruby.
First, singleton methods are checked. Then instance methods of the class, followed by the ancestors (which will be the included modules, then superclasses with their included modules).
So you could define
Object.const_missingdirectly, or include your Module in the singleton class of Object:You could also monkeypatch
Module#const_missing.