Ho letto in giro cercando di capire più dispacci e perché è così speciale.
Su Wikipedia mi sono imbattuto in questo semplice esempio:
(defmethod collide-with ((x asteroid) (y asteroid))
;; deal with asteroid hitting asteroid
)
(defmethod collide-with ((x asteroid) (y spaceship))
;; deal with asteroid hitting spaceship
)
(defmethod collide-with ((x spaceship) (y asteroid))
;; deal with spaceship hitting asteroid
)
(defmethod collide-with ((x spaceship) (y spaceship))
;; deal with spaceship hitting spaceship
)
Ciò che non capisco comunque, è il modo in cui è diverso dal fare qualcosa del genere:
class Asteroid {
def collide(y: Asteroid) = // deal with asteroid hitting asteroid
def collide(y: SpaceShip) = // deal with asteroid hitting spaceship
}
class SpaceShip {
def collide(y: Asteroid) = // deal with spaceship hitting asteroid
def collide(y: SpaceShip) = // deal with spaceship hitting spaceship
}
A livello tecnico, qual è la differenza? So che uno usa il dispatch multiplo e l'altro usa il dispatch singolo con l'overloading del metodo.
A quanto ho capito, lo schema dei visitatori è una soluzione per evitare di avere dispacci multipli in linguaggi OOP a singola spedizione, il che mi confonde di più poiché la soluzione di sovraccarico sembra funzionare perfettamente senza utilizzare questo schema.
Quindi qualcuno può spiegare le differenze tecniche tra fare uno contro l'altro?