教堂中是否有默认的字符串转换方法


当我

尝试将对象转换为字符串时,是否有调用的默认方法? (例如,Java中的toString或Python中的__str__。 我希望能够对对象数组执行以下操作,但其中一些可能是零:

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(( 方法。对于强制转换为字符串和普通 I/O,都将调用 writeThis 方法。例如:

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}

关于它为什么以这种方式工作,它在未来可能会做什么,以及当前策略的局限性,我还可以说更多......但是,如果您愿意,邮件列表将是进行此类讨论的更好地方。

相关内容

  • 没有找到相关文章

最新更新