2017-04-16 12 views
3

オブジェクトを文字列にキャストしようとすると呼び出されるデフォルトのメソッドはありますか? (JavaやPythonで__str__で例:のtoString。)私は、オブジェクトの配列を使用して次の操作を実行できるようにしたいが、それらのいくつかはnilを次のようになります。チャペルにデフォルトの文字列変換方法はありますか?

文字列ISNにnilをキャスト
for item in array { 
    writeln(item : string); 
} 

答えて

3

まず第一に、必ずしも「トン問題:あなたは、クラスCの出力をカスタマイズしたいなかった場合第二に

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} 

、あなたは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} 

あり、より私はそれがこのように動作する理由について言うことができる、それが将来的に行うには、現在の戦略の限界かもしれないもの...しかし、あなたがそれを望むなら、メーリングリストはそのような議論のためのより良い場所になります。

関連する問題