在Haxe中,如何在宏中读取变量名?

p

我正在尝试使用宏来从中转换一些变量声明:

function test():Void {
    var someComp:Component = __SOME_MACRO__();

    // Or...
    @getCompById var someComp:Component;

    // Or even simpler...
    getCompById(someComp, Component); //do some fancy macro magic...
    // Also, if it's not possible/easy with a variable ...
    getCompById("someComp", Component); //with a string of the variable name.
}

...对此:

function test() {
    var someComp:Component = cast container.getCompById("someComp");
}

我更倾向于第三个选项(较短的语法,相同的结果)。

但是我不知道如何编写宏(是否应该将String作为参数?表达式?)以及如何正确地将其作为宏表达式返回。

这是到目前为止我得到的(中断)代码:

macro static function getCompById(someVar:Expr, typeVar:Expr) {
    return macro {
        var someVar:typeVar = cast container.getCompById("someVar");
    };
}

有任何想法吗?

瓦内克

您发布的代码的问题首先是,您需要使用转义转义机制才能使其正常工作-因此,第一个更改是使用宏转义:

return macro var $someVar:$typeVar = cast container.getCompById($v{someVar});

现在会有一些问题:期望someVar是String类型,并且typeVarComplexType类型从中获取字符串组件很容易Expr但是,将转换为Expr非易事ComplexType最简单的方法是使用tink_macros库并使用asComplexType

因此,(未经测试的)代码将类似于:

using tink.MacroAPI;
using haxe.macro.Tools;
macro static function getCompById(someVarExpr:Expr, typeVarExpr:Expr)
{
  var typeVar = typeVarExpr.toString().asComplexType();
  switch (someVarExpr.getIdent())
  {
    case Success(someVar):
      return macro var $someVar:$typeVar = cast container.getCompById($v{someVar});
    case Failure(error): throw error;
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Haxe中,如何读取宏内的变量名?

来自分类Dev

如何在C ++中从宏组成变量名?

来自分类Dev

如何在变量中添加变量名?爪哇

来自分类Dev

如何在包含变量的变量名中存储信息?

来自分类Dev

如何在tidyverse函数中索引变量名?

来自分类Dev

如何在Perl中迭代变量名

来自分类Dev

如何在R函数中操作变量名?

来自分类Dev

如何在python中显示变量名?

来自分类Dev

如何在tidyverse函数中索引变量名?

来自分类Dev

如何在Python中增加变量名?

来自分类Dev

如何在Shell脚本中动态设置变量名?

来自分类Dev

如何在Stata中存储几个变量名?

来自分类Dev

如何在Bash中操作变量名?

来自分类Dev

如何在 PostgreSQL 中搜索变量名?

来自分类Dev

如何在列表中循环变量名

来自分类Dev

如何在 Kotlin 中迭代变量名?

来自分类Dev

如何在 HTML 中访问对象变量名

来自分类Dev

如何获取Shell函数以读取变量中的值而不是VBA中的变量名?

来自分类Dev

变量名如何存储在C中?

来自分类Dev

如何知道javascript中的变量名?

来自分类Dev

在Haxe宏中读取元数据

来自分类Dev

如何在haxe中以宏模式获取导入列表?

来自分类Dev

如何从SAS中的文件自动读取标头(变量名)

来自分类Dev

在vb.net中,如何在变量名中使用变量

来自分类Dev

如何在文件名中同时扩展变量名和通配符?

来自分类Dev

如何在React中的对象数组中调用变量名

来自分类Dev

在程序宏中,如何检查字符串是否是有效的变量名而不是关键字?

来自分类Dev

展开变量名称中的宏值

来自分类Dev

如何在JavaScript中的变量名中放置时间戳(例如var a12439853 = 1)

Related 相关文章

热门标签

归档