簡體   English   中英

Haxe宏調用一個類的靜態方法

[英]Haxe macro to call static method of a class

我有一組類,它們都具有相同的靜態方法(或實際上是一組方法)。 我如何實現一個宏,這將允許我調用給定類的某些方法? 像這樣的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>實例傳遞給可能來自任何地方的宏並將具體點路徑/類名稱作為字符串文字傳遞之間存在差異。 如果在編譯時未知有關調用的類,則所有宏都可以為您生成反射代碼,因為這必須在運行時決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM