在每个表达式的 haxe 宏中,我们可以以 http://api.haxe.org/haxe/macro/Position.html 的形式获得它的位置:
{
file:String, // filename - relative to source path
min:Int, // position of first character in file
max:Int // position of last character in file
}
我想获得最小和最大变量的行号和位置。
我绝对可以通过打开文件来做到这一点
FileSystem.absolutePath(Context.resolvePath(posInfo.file));
并计算行号,但 haxe 已经这样做了,最好从编译器获取此信息。是否可以?
最佳答案
在当前版本的 Haxe 中,您可以使用 PositionTools.toLocation
class Macro {
public static macro function log(args:Array<Expr>):Expr {
var loc = PositionTools.toLocation(Context.currentPos());
var locStr = loc.file + ":" + loc.range.start.line;
args.unshift(macro $v{locStr});
return macro SomeExtern.logFunc($a{args});
}
}
将
Macro.log("hi!")
转换为 SomeExtern.logFunc("Main:5", "hi!")
关于macros - haxe:从 haxe.macro.Position 获取行号和行位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38077490/