打印 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));
我看到 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));