4
Ruby hat method_missing
, Python hat getattr
. Bietet Boo etwas, mit dem ich Methodenaufrufe abfangen kann?Wie kann ich einen Methodenaufruf in Boo abfangen?
Ruby hat method_missing
, Python hat getattr
. Bietet Boo etwas, mit dem ich Methodenaufrufe abfangen kann?Wie kann ich einen Methodenaufruf in Boo abfangen?
Ja, Boo hat IQuackFu.
Grundsätzlich implementieren Sie IQuackFu
, die drei Methoden hat:
QuackGet
: aufgerufen wird, wenn Sie einen Eigenschaftswert erhaltenQuackSet
aufgerufen wird, wenn Sie einen Eigenschaftswert gesetztQuackInvoke
: aufgerufen wird Wenn Sie eine Methode aufrufenHier ist an example.
Eine kleine Frage: Kann Boo die Methodenaufrufe eines anderen Objekts abfangen? Ein bisschen wie Groovy mit der Metaklasse. Ich denke, die Antwort ist nein, denn es ist statisch getippt, aber ich möchte sicher sein. – Geo
Ich denke nicht, dass du es genauso wie Groovy machen kannst, aber du könntest eine IQuackFu-fähige Klasse verwenden, um eine andere Klasse zu umhüllen/zu dekorieren. Ihre IQuackFu-aktivierte Klasse könnte über ein Wörterbuch mit Methoden und Eigenschaften verfügen, um das expando-Verhalten zu implementieren. –
Boo ist nicht wirklich dynamisch wie groovy, Sie können die Definition eines Typs zur Laufzeit nicht ändern. Wenn Sie eine Variable als 'Ente' deklarieren, macht sie im Wesentlichen Compiler-Magie, um diese in eine späte Bindung gegen das Objekt zu verwandeln, das durch IQuackFu fließt, wenn es verfügbar ist. Es gibt keine echte Metaklasse in Boo. Du brauchst IronRuby oder IronPython, um etwas mehr wie die Metaklasse zu bekommen. –