是否可以覆盖Std.string如何将对象转换为字符串?
E.g。我有一个班级人员。
class Person {
public var name:String;
}
但是当我使用时:
var p:Person = new Person("Some name");
trace(Std.string(p)); // this will return something like foo.Person( bar )
但我希望有类似的东西:
var p:Person = new Person("Some name");
trace(Std.string(p)); // should return "Person(Some name)"
答案 0 :(得分:3)
向您的班级添加toString()
方法。
示例:https://try.haxe.org/#F7A77
它可以与Std.string()
一起使用,但可能不适用于运行时toString()
。 技巧在运行时为javascript目标工作,但 toString()
方法将被dce(1)删除。
您可以禁用dce(我不建议将其用于javascript目标)或只是强制编译器通过添加toString()
元来保持@:keep
功能:
@:keep
function toString() {
return "my object";
}
答案 1 :(得分:-1)
您可以通过实现一个返回字符串并使用" @:to"注释它的方法来覆盖Std.toString。例如:
class Person {
public var name:String;
public function new(s:String) {
name = s;
}
@:to
public inline function toString():String {
return "Person(" + name + ")";
}
}
class Test {
static function main() {
var p:Person = new Person("SomeName");
trace(Std.string(p));
}
}