¿Cómo verificas que el parche de mono se haya hecho a una clase específica en Ruby? Si eso es posible, ¿también es posible obtener la (s) implementación (es) anterior (es) del atributo que se ha corregido?¿Cómo se detecta que el parche de mono ha ocurrido en Ruby?
8
A
Respuesta
3
Encontré este blog que habla sobre cómo usar method_added para rastrear el parche de mono. No es demasiado difícil extenderlo para rastrear los métodos que fueron parcheados.
http://hedonismbot.wordpress.com/2008/11/27/monkey-business-2/:
Mediante el uso de clases abiertas, podemos volver a definir method_added para las instancias de la clase y hacer algunas cosas costumbre cada vez que se define un método para cualquier clase. En este ejemplo, estamos redefiniendo method_added para que rastree dónde se definió el método por última vez.
#!/usr/bin/env ruby class Class @@method_history = {} def self.method_history return @@method_history end def method_added(method_name) puts "#{method_name} added to #{self}" @@method_history[self] ||= {} @@method_history[self][method_name] = caller end def method_defined_in(method_name) return @@method_history[self][method_name] end end
8
Hay los ganchos method_added
y method_undefined
. Garry Dolley ha escrito un I mmutable module que evita el parche del mono.
Cuestiones relacionadas
- 1. parche (mono) parche o no (mono), esa es la pregunta
- 2. ¿Parche de mono o no?
- 3. parche de mono vs class_eval?
- 4. Si se permite el parche de mono en Ruby y Python, ¿por qué es más controvertido en Ruby?
- 5. embarcadero servlet no detecta que el cliente se ha desconectado
- 6. ¿Es posible el parche de mono en Java?
- 7. Detecta que una actividad se ha cerrado en Android
- 8. ¿Es realmente tan malo el "parche de mono"?
- 9. ¿Cómo código de parche mono que se carga automáticamente en Rails?
- 10. ¿Cómo detecta RVM cuando ha cambiado directorios?
- 11. ¿Cómo detecta PHP que se ha agotado el tiempo de espera de una sesión?
- 12. ¿Cómo se detecta cuando un archivo de sonido ha terminado?
- 13. Detecta que el teclado en pantalla se ha mostrado en Windows Phone 7
- 14. ¿Cómo detecta git que un archivo ha sido modificado?
- 15. ¿Se puede formatear el parche para que se pueda usar con el programa de parche?
- 16. Detecta y requiere un Windows QFE/parche durante la instalación
- 17. ¿Cómo se detecta que la transacción ya se inició?
- 18. ¿Cómo se detecta cuando el audio HTML5 ha terminado de reproducirse (más de una vez)?
- 19. Android: detecta que otra aplicación ha comenzado a reproducir audio
- 20. ¿Detecta si se ha modificado un objeto Java?
- 21. ¿Por qué este servidor que escribo no detecta que el cliente ha cerrado el socket?
- 22. ¿Cómo se aplica un parche al rubí en los rieles?
- 23. "Ha ocurrido un error interno". al cargar el archivo PFX con X509Certificate2
- 24. "El servidor MySQL se ha ido" con Ruby on Rails
- 25. El uso de parche de gevent monkey con subprocesos hace que el subproceso funcione en serie
- 26. Mono en el iPhone?
- 27. ¿Cómo se detecta el fraude por clic?
- 28. ¿Puede mi fuente de enlace decirme si ha ocurrido un cambio?
- 29. ORM que admite Mono?
- 30. ¿Cómo se usa System.Data.SQLite en mono?
podría estar relacionado con mi:? Http://stackoverflow.com/questions/175655/how-to-find-where-a-ruby-method-is-defined-at-runtime - si alguien se da cuenta de esto, ¡por favor hágamelo saber también! –