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
.