在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

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

来自分类Dev

Haskell读取变量名

来自分类Dev

变量名如何存储在C中?

来自分类Dev

如何知道javascript中的变量名?

来自分类Dev

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

来自分类Dev

如何在变量名内创建变量?

来自分类Dev

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

来自分类Dev

在Haxe宏中读取元数据

来自分类Dev

使用“读取变量”的“变量名错误”

来自分类Dev

如何在SQL中的for循环内创建动态变量名

来自分类Dev

从R中的列表内的变量名中删除后缀

来自分类Dev

javascript:如何增加循环内打印的变量名?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

展开变量名称中的宏值

来自分类Dev

“:错误的变量名读取:网站”

来自分类Dev

如何获取变量名

来自分类Dev

如何生成变量名

来自分类Dev

Bash-在变量名中扩展变量名

来自分类Dev

解决宏变量名称SAS中包含%eval的宏

来自分类Dev

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

来自分类Dev

如何在Perl中迭代变量名

来自分类Dev

如何快速获取结构体中的变量名?

来自分类Dev

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

来自分类Dev

Javascript如何避免函数中的变量名冲突?

来自分类Dev

如何在python中显示变量名?

来自分类Dev

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