Als Übung für mich selbst übersetzte ich ein Beispielprogramm in verschiedene Sprachen. Beginnend in C#, ich hatte eine Besucher-Muster-Schnittstelle wie folgt:bevorzugte Methode, um Besuchermuster in dynamischen Sprachen zu implementieren?
interface Visitor
{
void Accept(Bedroom x);
void Accept(Bathroom x);
void Accept(Kitchen x);
void Accept(LivingRoom x);
}
Umzug in Ruby (oder Python, oder was auch immer), erhalte ich nicht mehr Versand vom Compiler basierend auf Art. Soll ich den Versand im Besucher selbst vornehmen?
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
...
Oder sollte ich tun, um die Versendung in den verschiedenen specializaions des Zimmers:
class Bathroom<Room
def initialize(name)
super(name)
end
def accept(visitor)
visitor.acceptBathroom(self)
end
end
Oder gibt es eine andere bevorzugte Idiom, das in dynamischen Sprachen verwendet wird?