当我尝试将对象转换为字符串时,是否有一个默认方法被调用? (例如Java中的toString或Python中的__str__。)我希望能够使用一个Object数组执行以下操作,但其中一些可能是nil:
for item in array {
writeln(item : string);
}
答案 0 :(得分:3)
首先,将nil转换为字符串并不一定是个问题:
class C {
var x:int;
}
var array = [ new C(1), nil:C, new C(2) ];
for item in array {
writeln( item : string );
}
输出
{x = 1}
nil
{x = 2}
其次,如果您确实想要自定义C类的输出,那么您可以编写writeThis方法(或readWriteThis方法)。见The readThis(), writeThis(), and readWriteThis() Methods。 writeThis方法既可以用于强制转换为字符串,也可以用于普通I / O.例如:
class C {
var x:int;
proc writeThis(writer) {
writer.writef("{%010i}", x);
}
}
var array = [ new C(1), nil:C, new C(2) ];
for item in array {
writeln( "writing item : string ", item : string );
writeln( "writing item ", item);
}
输出
writing item : string {0000000001}
writing item {0000000001}
writing item : string nil
writing item nil
writing item : string {0000000002}
writing item {0000000002}
我可以说更多关于它为什么会这样运作,将来可能会做什么,以及当前策略的局限性...但如果你和#39,邮件列表将是一个更好的讨论场所。 ;我喜欢拥有它。