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

时间:2019-07-10 23:36:15

标签: haxe

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

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

我得到打印了:

[,1,,2,3]

是否有某种“评估打印”功能可以代替我输出:

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

也就是说,如果我想要的话,我可以使用它来将文本复制/粘贴到代码中(顺便说一句,可以为我提供确切的字符串数组)。

2 个答案:

答案 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));