Ricerca…


Osservazioni

Le patch per le scimmie, sebbene convenienti, presentano alcune insidie ​​che non sono immediatamente evidenti. In particolare, una patch come quella nell'esempio inquina l'ambito globale. Se due moduli aggiungono entrambi il Hash#symbolize , solo l'ultimo modulo richiesto applica effettivamente la sua modifica; il resto viene cancellato.

Inoltre, se c'è un errore in un metodo patchato, lo stacktrace punta semplicemente alla classe patchata. Ciò implica che c'è un bug nella classe Hash stessa (che esiste ora).

Infine, poiché Ruby è molto flessibile con i contenitori da tenere, un metodo che sembra molto semplice quando lo scrivi ha molte funzionalità indefinite. Ad esempio, la creazione della Array#sum è utile per una matrice di numeri, ma si interrompe quando viene fornita una matrice di una classe personalizzata.

Un'alternativa più sicura è la raffinatezza, disponibile in Ruby> = 2.0.

Aggiunta di funzionalità

Puoi aggiungere un metodo a qualsiasi classe in Ruby, indipendentemente dal fatto che sia un built-in o meno. L'oggetto chiamante viene referenziato 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow