gpt4 book ai didi

macros - 在宏中创建函数

转载 作者:行者123 更新时间:2023-12-02 19:55:34 25 4
gpt4 key购买 nike

我正在尝试使用 @:build@:autoBuild 宏向类及其子类的所有实例添加静态变量和静态函数。

我设法让静态变量正常工作,但我不知道如何从各种 EFunctionEFor 等“构建”函数。

这是我到目前为止的代码:

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 变量以及一些单例类函数。
那么:完整的 getIdField() 是什么样子的?

额外问题:
我最大的问题是完全缺乏有关这些功能的文档以及手册中的任何有用示例。有没有任何实际有用的教程来创建这样的函数?

奖金奖金问题:
FFun 中的 paramsargs 有什么区别?

最佳答案

您可以使用reification像在常规 Haxe 代码中一样编写函数体:

expr: macro {
if (_id == -1) {
_id = 0;
}
return _id;
},
<小时/>

params 是类型参数列表,args 是函数接收的参数列表。有一个关于此的琐事部分 on the Haxe Manual :

Trivia: Argument vs. Parameter

In some other programming languages, argument and parameter are used interchangeably. In Haxe, argument is used when referring to methods and parameter refers to Type Parameters.

关于macros - 在宏中创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34974996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com