Ruby LanguageMonkey Patching in Ruby


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.

Monkey Patching in Ruby Esempi correlati