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'


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow