Haxe表达式宏中如何不通过字符串获取类型?
解决方案
你需要的callX是一个自定义的宏函数,它接收类型引用表达式并返回对应的haxe.macro.Type实例,实现如下:
1. 定义宏函数
import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.Type; macro function getTypeFromExpr(e:Expr):Type { // 将传入的类型表达式转换为ComplexType,再获取对应的Type实例 return Context.getType(Context.toComplexType(e)); }
2. 使用方式
直接调用这个宏函数,传入目标类型即可:
var t = getTypeFromExpr(h2d.Object);
原理说明
Context.toComplexType(e):把h2d.Object这类类型引用表达式,转换为Haxe宏系统中用来描述类型的ComplexType结构。Context.getType(ct):基于ComplexType解析出对应的Type实例,和原代码Context.getType("h2d.Object")的效果完全一致,但避免了硬编码字符串。
内容的提问来源于stack exchange,提问作者bh213
相关产品推荐
相关产品推荐

