macros - Haxe 宏调用类的静态方法

标签 macros haxe

我有一组类,它们都具有相同的静态方法(或者实际上是一组方法)。我将如何实现一个宏,它允许我调用给定类的某些方法?像这样的getStaticMethod(className, methodName)(...args...) 。我需要这个,因为不幸的是 Class<T>不提供对静态类成员的访问。

最佳答案

这可以非常简单地完成,您甚至不需要任何“字符串类型代码”(将类和方法名称传递给宏)。

您可以将点路径表达式传递给宏:

import haxe.macro.Expr;

class Main {
    static function main() {
        trace(resolveDotPath(haxe.Json.parse)("{}")); // {}
        trace(resolveDotPath(Math.random)()); // 0.34622209081586863
    }

    static macro function resolveDotPath(dotPath:Expr):Expr {
        return macro $dotPath;
    }
}

但是 - 似乎在这一点上,您可以直接调用该函数?

如果您在调用宏时不知道该类是什么,则宏可能对您没有多大帮助,并且不允许您在编译时生成严格类型的代码。

传递一些 Class<T> 之间是有区别的可以来自任何地方的宏的实例,并将具体的点路径/类名作为字符串文字传递。如果所讨论的调用的类在编译时未知,则宏所能做的就是为您生成反射代码,因为这必须在运行时决定。

关于macros - Haxe 宏调用类的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55495628/

相关文章:

javascript - Haxe + Webpack 导出空对象

haxe - 如何获取类名作为字符串?

function - Clojure,宏可以做一些函数无法完成的事情吗

从头文件调用函数

c - 原型(prototype)线程协同例程: send concatenated boolean to macro

decimal - Haxe 中的 float 小数点类型

try-catch - 如何使用 Haxe 让 FlashDevelop 显示行错误以及错误发生的位置?

macros - 如何匹配 Rust 宏中表达式的类型?

c - 没有宏扩展的延迟字符串化

haxe - 在Haxe中执行外部程序中的URL/路径