[英]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.