Quais são as etapas * reais * na pesquisa do método ruby?

Eu li postagens de stackoverflow sobre esse tópico, além de vários artigos que incluemUma cartilha sobre pesquisa de método Ruby, Qual é o caminho de pesquisa de método no Ruby. Além disso, verifiquei o capítulo do modelo de objeto emMetaprogramação de Ruby 2, perguntou em algumas salas de chat e fezeste tópico do reddit. Antes de aprender C, fiz o possível para descobrir isso.

Conforme descrito pelos recursos acima, esses 6 locais são verificados (em ordem) durante a pesquisa do método em um objeto de recebimento comofido_instance:

classe singleton de fido_instanceIClass (de um módulo estendido)IClass (de um módulo anexado)classeIClass (de um módulo incluído)superclasse (se o método não for encontrado aqui, repita as etapas 4-6)

Obviamente, o diagrama está incompleto e todas essas classes singleton podem não ter sido criadas no mundo real. Ainda assim, essas 6 etapas deixam muito a desejar e não abrangem o cenário a seguir. Se não houvesse IClass estendido / anexado acima da classe de singletonfido_instance, não há explicação sobre se a etapa 4 é executada na classe singleton defido_instance. Devo assumir que não, pois toda a pesquisa do método entraria em curto-circuito.

Se eu tivesse que adivinhar um conjunto de etapas que poderiam explicar o comportamento da pesquisa de método do ruby, ele seria semelhante a:

Verificafido_instance.class para o método (obviamente, o ruby não usará seu próprio método #class para fazer a pesquisa do método, mas transmite a lógica do processo)Verificafido_instance.class.superclass para o método Continue adicionando.superclass e verificando o método até que nenhuma superclasse seja deixada. (novamente, o ruby não usará seu próprio método #superclass)método não foi encontrado. Comece na etapa 1, procurando #method_missing neste momento.

Também me lembro de ler que há um processo de pesquisa de método separado se o objeto de recebimento for uma classe, mas não consigo me lembrar de onde.

Então, qual é a explicação correta e detalhada que não envolve conhecer C?

questionAnswers(1)

yourAnswerToTheQuestion