我看到trace()
和Sys.print()
都给了我可读的输出。例如,如果我打印出数组
var a = ["", "1", "", "2", "3"];
我得到打印了:
[,1,,2,3]
是否有某种“评估打印”功能可以代替我输出:
["", "1", "", "2", "3"]
也就是说,如果我想要的话,我可以使用它来将文本复制/粘贴到代码中(顺便说一句,可以为我提供确切的字符串数组)。
答案 0 :(得分:3)
一种可能的解决方案是使用haxe.macro.Printer.printExpr()
。 ExprTools.toString()
是为您执行此操作的便捷功能。请注意,这需要直接将数组文字传递给宏函数,而不是传递诸如a
之类的标识符(其值在编译时未知)。
import haxe.macro.Context;
import haxe.macro.Expr;
using haxe.macro.ExprTools;
class Main {
static function main() {
var string:String = printExpression(["", "1", "", "2", "3"]);
trace(string); // source/Main.hx:9: ["", "1", "", "2", "3"]
}
static macro function printExpression(e:Expr):Expr {
return macro $v{e.toString()};
}
}
除此之外,您可能必须实施自己的版本
Std.string()
打印带引号的字符串。
答案 1 :(得分:2)
您可以为此使用Json
trace(haxe.Json.stringify(a));