我正在编写一个宏,需要打开一个目录,该目录与我的宏类在同一文件夹中。问题是,我需要能够做同样的事情,而不需要知道宏的文件夹。
我的问题很简单,有没有办法在宏中打开文件系统,在当前目录下。
e。旅客:a (b)宏。Hx, c(…))
我需要打开"c"直接当我运行宏方法从"宏。hx"
如果你有一个想法,谢谢你:)
可以在宏中使用这样的函数:
static function loadFileAsString(path:String) {
try {
var p = haxe.macro.Context.resolvePath(path);
return sys.io.File.getContent(p);
}
catch(e:Dynamic) {
return haxe.macro.Context.error('Failed to load file $path: $e', Context.currentPos());
}
}
基本上,Context.resolvePath
将解析相对于所有类路径的路径。所以,如果你的宏在文件my/package/MyMacro.hx
中,你想加载my/package/MyMacroData.json
,你可以使用:
haxe.macro.Context.resolvePath( 'my/package/MyMacroData.json' );
这将检查构建中的每个类路径-包括任何haxelib等,所以它会找到你的文件,但是它可能会"影子"它,通过在相同的包/位置有一个文件,但在不同的类路径或haxelib,所以尝试使用唯一的包/名称,这样就不会发生意外。
但它应该为你工作很好,我使用它在我的编译时库,如果你想看看一个例子实现。我已经链接到函数与相关代码。