El curioso comportamiento de class en Ruby y el monkey patching
Una de las características que hacen a Ruby más útil es la capacidad para dinamizar el lenguaje. Una de ellas son las Open Classes y es, creo, lo más chocante cuando te enfrentas por primera vez a código Ruby. Vamos a explicar lo que signifca el concepto de Open Classes con un ejemplo sencillísimo.
class String def myMethod printf "Hi!" end end "A string".myMethod
Como podeis ver es fácil extender clases existentes añadiéndoles nuevos métodos. Seguro que si habéis utilizado alguna gem vereis que se añaden métodos a clases ya existentes como por ejemplo algún comparador. Pues bien, así es como se hace.
Seguro que muchos según habéis leído esto os habéis llevado las manos a la cabeza pensando: “¡Recristo! ¡La que se puede armar con esto!”. Pues tenéis razón. Con esto se pueden armar unos circos importantes. Si no se utiliza con control puedes acabar con una clase cuyo código está expandido entre cientos de ficheros y cuyo comportamiento nunca está claro ya que la misma función ha sido sobrecargada en ciertos de sitios. A la práctica de abusar del dinamismo de lenguajes como ruby o scala se le suele llamar monkey patching.
Well, I was just totally sold by Adam, the idea being that if it walks like a duck and talks like a duck, it’s a duck, right? So if this duck is not giving you the noise that you want, you’ve got to just punch that duck until it returns what you expect.
- Patrick Ewing (no es el jugador de baloncesto)
Hay que pensar en las open classes como “peligrosas” al menos pero sin ellas no sería ni mucho menos fácil crear maravillas como el Active Record de rails.





