Я хочу создать макрос, который генерирует этот код для меня:Как объявить экземпляр в Haxe макро функции
if (myEntity.get(Attack) == null) myEntity.add(new Attack());
if (myEntity.get(Confused) == null) myEntity.add(new Confused());
if (myEntity.get(Defend) == null) myEntity.add(new Defend());
if (myEntity.get(Offense) == null) myEntity.add(new Offense());
В коде я хотел бы объявить/использовать его как это:
EntityMacroUtils.addComponents(myEntity, Attack, Confused, Defend, Offense);
текущая макро функция выглядит следующим образом:
macro public static function addComponents(entity:ExprOf<Entity>, components:Array<ExprOf<Class<Component>>>):Expr
{
var exprs:Array<Expr> = [];
for (componentClass in components)
{
var instance = macro $e { new $componentClass() }; // problem is here
var expr = macro if ($entity.get($componentClass) == null) $entity.add(instance);
exprs.push(expr);
}
return macro $b{ exprs };
}
Эта макрокоманда функция неправильно, я получаю ошибку:
EntityMacroUtils.hx:17: characters 22-43 : Type not found : $componentClass
Проблема заключается в том, что я не знаю, как определить new $componentClass()
. Как я могу это решить?
Я также хочу, чтобы не было Type.createInstance
в выход код.
Спасибо, я попробую это. Все еще пытаюсь найти свой путь с помощью макросов и выражения. Иногда мне кажется, что я понимаю, как это работает, пока это не произойдет :) –
Это одна из единственных вещей, которые я не мог поделать с овеществлением. – Philippe
Хм Я еще не могу понять, как реализовать это в рамках текущей настройки .. –