Question

Toutes mes excuses pour la nature récurrente de cette question, mais le choisi réponse à une question sur le SO m'a fait remettre en question ma compréhension de la réflexion.

Je pensais que la réflexion était principalement sur l'interrogation des événements internes d'un programme pendant son exécution. L'exemple donné dans cette réponse patches intégrée dans la classe entière de Ruby.

  • est-ce pas plus comme fonction surcharge / héritage plutôt que la modification d'exécution?
  • est la classe rouvre vraiment un exemple de réflexion?
Était-ce utile?

La solution

La réflexion peut être utilisé pour mettre en œuvre la liaison tardive.

La liaison tardive peut être utilisé pour mettre en œuvre rapiéçage de singe.

Correctif de singe peut être utilisé pour réaliser le genre de style de codage indiqué dans cette réponse.

Mais il y a d'autres façons de mettre en œuvre ces fonctionnalités qui ne nécessitent pas rapiéçage de singe, ou la réflexion. Heck, une bonne macro pré-compilateur pourrait vous approcher.

Alors, techniquement correct, mais pas (à mon humble avis) le plus grand exemple.

Autres conseils

Au risque d'augmenter le niveau de récursivité, je voudrais répondre bien que vous faites référence à ma réponse à ce lien.

Le malentendu est facile à faire en raison de notre compréhension intuitive de la réflexion comme se référant à regarder vers l'intérieur. Et ce qui est certainement un aspect important de la réflexion dans la programmation aussi - en Ruby, par exemple, nous avons des méthodes telles que instance_of pour permettre des objets de poser des questions sur eux-mêmes lors de l'exécution.

Mais jetez un oeil à la définition de wikipedia de réflexion :

  

réflexion est le processus par lequel un   programme informatique peut observer   modifier sa propre structure et   comportement.

Comme vous pouvez le voir, la réflexion est plus que l'auto-inspection simplement l'exécution. Il est également la possibilité de modifier le comportement d'exécution. Réouverture d'une classe est aussi appelée « patching singe ». Vous pouvez en lire davantage .

  

Un patch de singe est un moyen de    étendre ou modifier le code d'exécution de   langages dynamiques sans modification   le code source d'origine.

     

Ce processus est aussi appelé:   - patching Guerrilla   - L'extension des classes précédemment déclarées   - Cours Rouvrir   - Funk dynamique   - Détournement   - Punching Duck   - Méthode Swizzling

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top