Pregunta

Disculpas por la naturaleza recursiva de esta pregunta, pero el elegido respuesta a una pregunta sobre SO me hizo cuestionar mi comprensión de la reflexión.

pensé reflexión fue principalmente sobre cómo consultar los sucesos internos de un programa mientras se está ejecutando. El ejemplo que se da en esta respuesta parches clase Entero integrado de Ruby.

  • ¿No es éste más como la sobrecarga de funciones / herencia en lugar de la modificación en tiempo de ejecución?
  • ¿Se reabre la clase realmente un ejemplo de reflexión?
¿Fue útil?

Solución

La reflexión puede ser usado para implementar el enlace en tiempo.

tardío de unión puede ser utilizado para implementar parches mono.

parches mono puede ser utilizado para lograr el tipo de estilo de codificación que se muestra en la respuesta.

Pero hay otras maneras de implementar este tipo de características que no requieren parches mono, o la reflexión. Heck, una buena pre-compilador macro podría obtener cerca.

Así que, técnicamente correcto, pero no (en mi humilde opinión) el mejor ejemplo.

Otros consejos

A riesgo de aumentar el nivel de recursividad, me gustaría responder si bien se hace referencia a mi respuesta a ese enlace.

El malentendido es fácil de hacer debido a nuestra comprensión intuitiva de la reflexión como una referencia a mirar hacia adentro. Y eso es sin duda un aspecto importante de la reflexión en la programación también - en Ruby, por ejemplo, tenemos métodos como instance_of para permitir que los objetos puedan hacer preguntas sobre ellos mismos en tiempo de ejecución.

Pero echar un vistazo a la definición de Wikipedia de la reflexión :

  

reflexión es el proceso por el cual una   programa de ordenador puede observar y   modificar su propia estructura y   comportamiento.

Como se puede ver, la reflexión es más que el tiempo de ejecución de autoinspección. Es también la capacidad de cambiar el comportamiento en tiempo de ejecución. La reapertura de una clase también se conoce como "parches mono". Puede leer más sobre él aquí .

  

Un parche mono es una manera de    ampliar o modificar el código de tiempo de ejecución de   lenguajes dinámicos sin alterar   el código fuente original.

     

Este proceso también se conoce como:   - parcheo Guerrilla   - La extensión de las clases previamente declarados   - La reapertura de las clases   - Funk dinámico   - secuestro   - Perforación del pato   - Método Swizzling

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top