Oggi cerchiamo di capire un po' meglio la differenza tra i metodi Module#include e Module#prepend.
Vediamo la differenza con un esempio mooolto semplice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Cosa abbiamo fatto? Allora abbiamo la classe Person con un metodo name. Poi
abbiamo il modulo Superhero con due metodi: fly e name. Notare a questo
punto che sia la classe Person che il modulo Superhero hanno entrambi un
metodo che si chiama name. Ora andiamo a mixare la classe Person con il
modulo Superhero usando il metodo include. Se invochiamo il metodo name su
un oggetto di tipo Person vedremo che viene chiamato il metodo definito dentro
la classe Person e non quello definito nel modulo Superhero. Questo ci
potrebbe anche andare bene, ma a volte vorremmo che quando facciamo questo tipo
di operazione i metodi del modulo che mixiamo sovrascrivessero (override) i
metodi della classe, come succede quando estendiamo una classe. Per ottenere
questo usiamo il metodo prepend al posto di include disponibile dalla
versione 2 di Ruby.
1 2 3 | |
Adesso vediamo che viene invocato il metodo name definito nel modulo Superhero.