2009-07-18 7 views

Répondre

7

Oui, Boo a IQuackFu.

Fondamentalement, vous mettre en œuvre IQuackFu, qui dispose de trois méthodes:

  • QuackGet: est appelée lorsque vous obtenez une valeur de propriété
  • QuackSet est appelée lorsque vous définissez une valeur de propriété
  • QuackInvoke: est appelée lorsque vous appelez une méthode

Voici an example.

+0

Petite question: est-ce que Boo peut intercepter les invocations de méthode d'un autre objet? Un peu comme Groovy fait avec la métaclasse. Je pense que la réponse est non, car elle est typée statiquement, mais je voudrais être sûr. – Geo

+0

Je ne pense pas que vous puissiez le faire de la même manière que Groovy, mais vous pouvez utiliser une classe permise par IQuackFu pour envelopper/décorer une autre classe. Votre classe activée par IQuackFu pourrait avoir un dictionnaire de méthodes et de propriétés pour implémenter le comportement d'expansion. –

+0

Boo n'est pas vraiment dynamique comme groovy, vous ne pouvez pas changer la définition d'un type lors de l'exécution. Si vous déclarez une variable comme 'duck', elle fait essentiellement de la magie du compilateur pour la transformer en liaison tardive contre cet objet, qui passera par IQuackFu si elle est disponible. Il n'y a pas de métaclasse réelle dans Boo. Vous auriez besoin de IronRuby ou IronPython pour obtenir quelque chose de plus comme la métaclasse. –

Questions connexes