覆盖 Std.string
Overwrite Std.string
是否可以覆盖 Std.string 将对象转换为字符串的方式?
例如我有一个 class 人。
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)"
您可以通过实施一种方法来覆盖 Std.toString,该方法 returns 一个字符串并用“@:to”对其进行注释。示例:
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));
}
}
将 toString()
方法添加到您的 class。
示例:https://try.haxe.org/#F7A77
它适用于 Std.string()
,但可能不适用于运行时 toString()
。技巧确实在运行时对javascript目标起作用,但是toString()
方法将被dce删除(1).
您可以禁用 dce(我不建议将其用于 javascript 目标)或者通过添加 @:keep
元强制编译器保留您的 toString()
函数:
@:keep
function toString() {
return "my object";
}
是否可以覆盖 Std.string 将对象转换为字符串的方式?
例如我有一个 class 人。
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)"
您可以通过实施一种方法来覆盖 Std.toString,该方法 returns 一个字符串并用“@:to”对其进行注释。示例:
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));
}
}
将 toString()
方法添加到您的 class。
示例:https://try.haxe.org/#F7A77
它适用于 Std.string()
,但可能不适用于运行时 toString()
。技巧确实在运行时对javascript目标起作用,但是toString()
方法将被dce删除(1).
您可以禁用 dce(我不建议将其用于 javascript 目标)或者通过添加 @:keep
元强制编译器保留您的 toString()
函数:
@:keep
function toString() {
return "my object";
}