Domanda

Ci scusiamo per la natura ricorsiva di questa domanda, ma il scelto risposta ad una domanda sul SO mi ha fatto mettere in discussione la mia comprensione di riflessione.

Ho pensato riflessione è stato principalmente di interrogare gli avvenimenti interni di un programma mentre è in esecuzione. L'esempio riportato in questa risposta patch classe Integer built-in di Ruby.

  • non è presente più come l'overloading di funzioni / eredità, piuttosto che modifica runtime?
  • è di classe riapre davvero un esempio di riflessione?
È stato utile?

Soluzione

La riflessione può essere utilizzato per implementare l'associazione tardiva.

binding tardivo può essere utilizzato per implementare scimmia patch.

Scimmia patch può essere utilizzato per ottenere il tipo di stile di codifica indicato in quella risposta.

Ma ci sono altri modi per implementare tali caratteristiche che non richiedono l'applicazione di patch scimmia, o di riflessione. Heck, una buona macro pre-compilatore potrebbe ottenere vicino.

Quindi, tecnicamente corretta, ma non (secondo me) il più grande esempio.

Altri suggerimenti

A rischio di aumentare il livello di ricorsione, vorrei rispondere, anche se si fa riferimento la mia risposta a quel collegamento.

L'equivoco è facile fare a causa della nostra comprensione intuitiva di riflessione come riferito a guardare verso l'interno. E questo è certamente un aspetto importante della riflessione in programmazione anche - in Ruby, per esempio, abbiamo metodi come instance_of per consentire oggetti di porre domande su se stessi in fase di esecuzione.

Ma dare un'occhiata a la definizione di Wikipedia di riflessione :

  

riflessione è il processo mediante il quale un   programma di computer può osservare e   modificare la propria struttura e   comportamento.

Come si può vedere, la riflessione è più di una semplice esecuzione di auto-controllo. E 'anche la capacità di modificare il comportamento di runtime. Riapertura una classe è indicato anche come "patch scimmia". Si può leggere di più su di esso qui .

  

Una patch scimmia è un modo per    ampliare o modificare il codice runtime di   linguaggi dinamici senza alterare   il codice sorgente originale.

     

Questo processo viene indicato anche come:   - patching Guerrilla   - Estendere le classi precedentemente dichiarate   - Riapertura classi   - Dynamic Funk   - Dirottamento   - Anatra Punzonatura   - Metodo Swizzling

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top