当我尝试将对象转换为字符串时,是否会调用默认方法?(例如 Java 中的 toString 或 Python 中的 __str__ 。)我希望能够对对象数组执行以下操作,但其中一些可能是 nil:
for item in array {
writeln(item : string);
}
当我尝试将对象转换为字符串时,是否会调用默认方法?(例如 Java 中的 toString 或 Python 中的 __str__ 。)我希望能够对对象数组执行以下操作,但其中一些可能是 nil:
for item in array {
writeln(item : string);
}
首先,将 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 方法)。请参阅readThis()、writeThis() 和 readWriteThis() 方法。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}
关于它为什么以这种方式工作,它在未来可能会做什么,以及当前策略的局限性,我还有更多要说的......但如果你愿意,邮件列表将是一个更好的讨论场所它。