2009-07-18 12 views

Antwort

7

Ja, Boo hat IQuackFu.

Grundsätzlich implementieren Sie IQuackFu, die drei Methoden hat:

  • QuackGet: aufgerufen wird, wenn Sie einen Eigenschaftswert erhalten
  • QuackSet aufgerufen wird, wenn Sie einen Eigenschaftswert gesetzt
  • QuackInvoke: aufgerufen wird Wenn Sie eine Methode aufrufen

Hier ist an example.

+0

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

+0

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. –

+0

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. –