打印 eval(文字)而不是人类可读的方式?

Way to print for eval (literals) instead of for human-readable?

我看到 trace()Sys.print() 都给我人类可读的输出。例如,如果我打印出数组

var a = ["", "1", "", "2", "3"];

我得到打印:

[,1,,2,3]

是否有某种 "eval print" 函数可以给我输出,例如:

["", "1", "", "2", "3"]

也就是说,如果我愿意,我可以将 copy/paste 用于代码的文字(顺便说一句,可以评估什么来给我那个确切的字符串数组)。

一个可能的解决方案可能是使用 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() 打印带引号的字符串。

你可以使用 Json

trace(haxe.Json.stringify(a));