首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在宏中创建函数

在宏中创建函数
EN

Stack Overflow用户
提问于 2016-01-24 19:06:49
回答 1查看 605关注 0票数 4

我正在尝试使用@: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有什么区别

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-24 19:35:24

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

expr: macro {
    if (_id == -1) {
        _id = 0;
    }
    return _id;
},

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

琐事:参数与参数

在其他一些编程语言中,参数实参和参数可以互换使用。在Haxe中,参数用于引用方法,参数用于引用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34974996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档