Я пытаюсь добавить статическую переменную и статическую функцию ко всем экземплярам класса и его дочерних классов с использованием макросов @: build и @: autoBuild.Создание функции в макросе
мне удалось получить статическую переменную работать, но я понятия не имею, как «построить» функцию из различных EFunction, эфоры и т.д.
Вот код, который я до сих пор:
macro static public function addGetId() :Array<Field>
{
var fields : Array<Field> = Context.getBuildFields();
// The static _id field
var idField = {
name : "_id",
doc : null,
meta : [],
access : [AStatic, APrivate],
kind : FVar(macro : Int, macro -1),
pos : Context.currentPos()
};
// The getId function field
var getIdField = {
name : "getId",
doc : "Returns the ID of this command type.",
meta : [],
access : [AStatic, APublic],
kind : FFun({
params : [],
args : [],
expr: // What do I have to write here???
ret : macro : Int
}),
pos : Context.currentPos()
};
fields.push(idField);
fields.push(getIdField);
return fields;
}
Вот как функция, которую я хочу добавить будет выглядеть в обычном коде, если он был на самом деле в файле .hx:
public static function getId() : Int
{
if (_id == -1)
{
_id = MySingleton.getInst().myGreatFunction()
}
return _id;
};
Так ссылается на недавно добавленный «_id» переменную а s, а также некоторые функции одноэлементного класса.
Итак: Как будет выглядеть полный getIdField?
Бонус Вопрос:
Моя самая большая проблема с этим полное отсутствие документации об этих функциях, а также любые полезные примеры в руководстве. Есть ли действительно полезный учебник для создания таких функций?
Бонус Бонус Вопрос:
Что такое различие между Params и арг в классе FFun?