вроде как

читал сообщения StackOverflow по этой теме, а также несколько статей, которые включаютУчебник для начинающих по методике Ruby, Что такое путь поиска метода в Ruby, Кроме того, я проверил главу об объектной модели вРубин Метапрограммирование 2спросил в нескольких чатах и ​​сделалэта тема Reddit, Если не считать C, я сделал все возможное, чтобы понять это.

Как описано выше ресурсами, эти 6 мест проверяются (по порядку) во время поиска метода на принимающем объекте, какfido_instance:

синглтон класс fido_instanceIClass (из расширенного модуля)IClass (из готового модуля)классIClass (из включенного модуля)суперкласс (если метод не найден здесь, повторите шаги 4-6)

Очевидно, что диаграмма неполна, и все эти одноэлементные классы, возможно, не были созданы в реальном мире. Тем не менее, эти 6 шагов оставляют желать лучшего и не охватывают следующий сценарий. Если не было расширенного / предопределенного IClass выше синглтон-классаfido_instance, тогда нет объяснения того, выполняется ли шаг 4 для одноэлементного классаfido_instance, Я должен предположить, что нет, так как весь метод поиска приведет к короткому замыканию.

Если бы я угадал набор шагов, которые могли бы объяснить поведение поиска метода ruby, это могло бы выглядеть так:

проверитьfido_instance.class для метода. (очевидно, ruby ​​не собирается использовать свой собственный метод #class для поиска метода, но он передает логику процесса)проверитьfido_instance.class.superclass для метода. Продолжайте добавлять.superclass и проверка метода до тех пор, пока не останется суперклассов. (опять же, ruby ​​не собирается использовать свой собственный метод #superclass)метод не найден. Начните с шага 1, ищите #method_missing на этот раз.

Я также вспоминаю, что читал, что есть отдельный процесс поиска метода, если принимающий объект является классом, но я не могу вспомнить, где.

Итак, каково правильное, подробное объяснение, которое не предполагает знания C?

Ответы на вопрос(1)

Ваш ответ на вопрос