Chapel中是否有默认的String转换方法?

时间:2017-04-16 19:25:17

标签: chapel

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

for item in array {
    writeln(item : string);
}

1 个答案:

答案 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,邮件列表将是一个更好的讨论场所。 ;我喜欢拥有它。