Ruby Language
Parches de mono en rubí
Buscar..
Observaciones
El parche del mono, aunque es conveniente, tiene algunas trampas que no son evidentes de inmediato. En particular, un parche como ese en el ejemplo contamina el alcance global. Si los dos módulos añaden Hash#symbolize
, solo el último módulo requerido aplica su cambio; el resto son borrados.
Además, si hay un error en un método parcheado, el seguimiento de la pila simplemente apunta a la clase parcheada. Esto implica que hay un error en la clase Hash
(que ahora existe).
Por último, dado que Ruby es muy flexible con los contenedores para guardar, un método que parece muy sencillo cuando lo escribes tiene muchas funciones no definidas. Por ejemplo, crear Array#sum
es bueno para una matriz de números, pero se interrumpe cuando se le da una matriz de una clase personalizada.
Una alternativa más segura son los refinamientos, disponibles en Ruby> = 2.0.
Agregando Funcionalidad
Puedes agregar un método a cualquier clase en Ruby, ya sea integrado o no. Se hace referencia al objeto llamante usando self
.
class Fixnum
def plus_one
self + 1
end
def plus(num)
self + num
end
def concat_one
self.to_s + '1'
end
end
1.plus_one # => 2
3.plus(5) # => 8
6.concat_one # => '61'