Comme un exercice pour moi-même, je traduisais un exemple de programme en plusieurs langues. A partir de C#, j'avais une interface visiteur-modèle comme ceci:manière préférée d'implémenter le modèle de visiteur dans les langages dynamiques?
interface Visitor
{
void Accept(Bedroom x);
void Accept(Bathroom x);
void Accept(Kitchen x);
void Accept(LivingRoom x);
}
Déplacement à ruby (ou python, ou autre), je ne se dépêche du compilateur en fonction du type. Devrais-je faire l'expédition dans le visiteur lui-même?
class Cleaner
def accept(x)
acceptBedroom(x) if Bedroom === x
acceptBathroom(x) if Bathroom === x
acceptKitchen(x) if Kitchen===x
acceptLivingRoom(x) if LivingRoom===x
end
...
Ou dois-je faire l'envoi dans les différents specializaions de la pièce:
class Bathroom<Room
def initialize(name)
super(name)
end
def accept(visitor)
visitor.acceptBathroom(self)
end
end
Ou est-il un autre idiome préféré qui est utilisé dans les langages dynamiques?