自作クラスをtrace()対応させる方法

自作したクラスをtrace()に渡したときの出力を作るには、と思って調べてみたら、toString()というメソッドを作ればいいことが分かりました。

テストコードを作って試してみました。二つのasソースとTest-config.xmlを準備してください。(デバッグ環境の設定やfdbの使用方法などはこちらのエントリ(4/10のエントリ)を参考にしてください)

/* TestObject.as */
package{
  public class TestObject
  {
    public function toString():String
    {
      return "Testクラスのインスタンスです.";
    }
  }
}
/* Test.as */
package {
  import flash.display.Sprite;
  
  public class Test extends Sprite
  {
    public function Test()
    {
      var obj:TestObject = new TestObject();
      trace( obj );
    }
  }
}
<!-- Test-config.xml -->
<flex-config>
  <!-- 書き出しファイル名 -->
  <output>Test.swf</output>
  
  <!-- コンパイラオプション -->
  <compiler>
    <debug>true</debug>
  </compiler>
</flex-config>

fdbで実行すると以下のような出力が行われます。

(fdb) c
[trace] Testクラスのインスタンスです.

ちなみに、TestObject.asのtoString()を定義しなかったときには以下のような出力になります。

(fdb) c
[trace] [object TestObject]

マトリックスクラスや、複雑なデータ構造のクラスを作ったときには便利ですね。