Haxe宏 - 用相对路径打开文件

时间:2014-03-30 16:00:41

标签: file macros haxe

我正在编写一个需要打开与我的宏类位于同一文件夹中的目录的宏。问题是我需要能够做同样的事情,而不需要了解宏的文件夹。

我的问题很简单,有没有办法在宏中打开当前目录中的FileSystem。

例如: a(b(Macro.hx,c(...)))

我需要打开" c"我直接从" Macro.hx"

运行宏方法

如果您有任何想法,谢谢:)

1 个答案:

答案 0 :(得分:6)

您可以在宏中使用这样的函数:

    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等,所以它会找到你的文件,但是它可以" shadow"它,通过在同一个包/位置,但在不同的类路径或haxelib中的文件,所以尝试使用一个独特的包/名称,所以这不会偶然发生。

但它应该可以正常工作,如果你想查看一个示例实现,我会在我的compiletime library中使用它。我已使用相关代码链接到该函数。