Pergunta

Desculpas para a natureza recursiva desta questão, mas o escolhido resposta a uma pergunta sobre SO me fez questionar minha compreensão de reflexão.

Eu pensei reflexão foi principalmente sobre como consultar os acontecimentos internos de um programa enquanto ele está funcionando. O exemplo dado nesta resposta remendos classe Integer built-in de Ruby.

  • Não é este mais como sobrecarga de funções / herança ao invés de modificação tempo de execução?
  • É classe reabertura realmente um exemplo de reflexão?
Foi útil?

Solução

A reflexão pode ser usado para implementar a ligação tardia.

ligação tardia pode ser usado para implementar macaco patching.

Monkey patch pode ser usado para alcançar o tipo de estilo de codificação mostrado nessa resposta.

Mas há outras maneiras de implementar tais características que não exigem patching macaco, ou reflexão. Heck, uma boa macro pré-compilador poderia chegar perto.

Então, tecnicamente correta, mas não (IMHO) o maior exemplo.

Outras dicas

Com o risco de aumentar o nível de recursividade, eu gostaria de responder, embora você está fazendo referência a minha resposta naquele link.

O mal-entendido é fácil de fazer por causa da nossa compreensão intuitiva de reflexão como referindo-se olhando para dentro. E isso é certamente um aspecto importante de reflexão na programação também - em Ruby, por exemplo, temos métodos como ocorrência_de para permitir que objetos de fazer perguntas sobre si mesmo em tempo de execução.

Mas dê uma olhada a definição wikipedia de reflexão :

reflexão é o processo pelo qual um programa de computador pode observar e Modificar sua própria estrutura e comportamento.

Como você pode ver, a reflexão é mais do que apenas auto-inspeção em tempo de execução. É também a capacidade de mudança de comportamento em tempo de execução. Reabertura de classe também é referido como "patching macaco". Você pode ler mais sobre isso aqui .

Um patch macaco é uma forma de alargar ou alterar o código de tempo de execução de linguagens dinâmicas, sem alterar o código fonte original.

Este processo também é conhecido como: - patching Guerrilla - Estendendo as classes tenham sido previamente declarados - aulas Reabertura - Funk Dinâmico - Sequestro - perfuração Duck - Método Swizzling

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top