2011-01-07 3 views
2

Я хочу, чтобы иметь возможность динамически создавать новый класс, который имеет все методы другого класса. В частности, я хочу сделать свой собственный прокси-сервер. класс ApiProxy extends haxe.remoting.Proxy {} Новый класс ApiProxy имел бы все те же имена и подписи метода, что и Api, и будет проверяться временем компиляции. Только каждый вызов выполняется через провод, а не обрабатывается локально.Динамически создавать класс, который издевается над другим классом (например, remotingProxy) в haxe

Я думаю, что remoting.Proxy - это волшебный внутренний класс - это правда? У обычных пользователей есть возможность определить класс, который так же статичен, как это? Я никогда не видел этого в Java, и я впечатлен его возможностями в Haxe.

Как бы реализовать свой собственный класс, как remoting.Proxy?

ответ

1

haxe.remoting.Proxy действительно «магия», описывается, что путь в комментариях источник: http://code.google.com/p/haxe/source/browse/trunk/std/haxe/remoting/Proxy.hx?r=3592

Вы не можете повторить с «нормальной» Haxe кода. Добавление/изменение функциональности до haxe.remoting.Proxy для вашего собственного класса будет сложным, но, возможно, не невозможным. Проверьте учебник для «эквивалентного» апи реализующего код: http://haxe.org/doc/remoting/proxy

Однако, что-то вроде этого, вероятно, можно с помощью макросов: http://haxe.org/manual/macros

Работа с макросами является сложной задачей сейчас. В документации или примерах немного мало, а макро-функция все еще находится в разработке. Тем не менее, это позволяет вам иметь некоторый контроль над компилятором во время процесса компиляции, который может быть удивительно полезен время от времени.

удачи!

+0

Я попытался создать родительский класс с пустыми методами реализации (а не с интерфейсом), а затем на клиенте, я попытался создать экземпляр экземпляра родителя и пропустить все методы, пытаясь заменить их вызовами по сети, но Я не мог заменить методы новыми, даже если я объявил методы динамическими. Это можно было бы легко сделать, если бы я мог просто динамически менять методы. Вы знаете, как это сделать? – MatternPatching

+0

Объявление динамических методов должно работать. Можете ли вы показать код? –

+1

Да, если вы просто переписываете динамические поля, это должно работать нормально. Вы можете рассмотреть возможность переопределения нескольких методов для экземпляра, а не всего экземпляра в этом случае. Reflect.fields, а методы Type иногда возвращают скрытые (секретные) поля, которые вы, возможно, не захотите прокси. У меня есть класс/метод утилиты под названием «Клей», который позволяет сочетать функции безопасным способом: http://scwn.net/2009/10/09/function-decoration-in-haxe-glue/ – jdonaldson

1

вы можете добиться этого с помощью макросов

взглянуть на этот пост, чтобы получить представление:

http://haxe.1354130.n2.nabble.com/Macros-Are-Awesome-tc5945711.html

Вы можете написать, сохранить в файловой системе и зарегистрировать новый класс внутри макроса , на основе информации о типе, которая была передана функции.

+0

FYI, ссылка, размещенная внутри этого сообщения в форуме, уже мертва (https://gist.github.com/788833 больше не существует в Github) :( – bigp

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