2009-07-18 4 views

ответ

7

Да, Boo имеет IQuackFu.

В принципе, вы реализуете IQuackFu, который имеет три метода:

  • QuackGet: вызывается, когда вы получаете значение свойства
  • QuackSet вызывается, когда вы установите значение свойства
  • QuackInvoke: вызывается при вызове метода

Адрес an example.

+0

Небольшой вопрос: может ли Boo перехватить вызовы других объектов? Похоже, что Groovy делает с метаклассом. Я думаю, что ответ отрицательный, поскольку он статически напечатан, но я бы хотел быть уверен. – Geo

+0

Я не думаю, что вы можете сделать это так же, как Groovy, но вы можете использовать класс с поддержкой IQuackFu для обертывания/украшения другого класса. Класс IQuackFu может иметь словарь методов и свойств для реализации expando-поведения. –

+0

Boo не является действительно динамичным, как groovy, вы не можете изменить определение типа во время выполнения. Если вы объявляете переменную как «утку», она по существу делает магию компилятора, чтобы превратить ее в позднюю привязку к этому объекту, которая будет протекать через IQuackFu, если она доступна. В Boo нет реального метакласса. Вам понадобится IronRuby или IronPython, чтобы получить нечто большее, чем метакласс. –

Смежные вопросы