Это всего лишь следствие того, как в Ruby разрешаются вызовы методов.
Сначала проверяются одноэлементные методы.Затем методы экземпляра класса, за которыми следуют предки (которые будут включенными модулями, затем суперклассы с включенными в них модулями).
Таким образом, вы можете определить Object.const_missing
напрямую или включить свой модуль в класс singletonобъекта:
class << Object
include Extensions
end
NonExistent # => prints "NonExistent"
Вы также можете получить monkeypatch Module#const_missing
.