BeInteractive!

もしかしたら既にあるかもしれないけど、Reference型とういのを考えたので書いておく。(もっと頭いい方法があったら教えてください)

そういう状況自体あまりない気もするんだけど、Flashでどうしてもプリミティブ型を参照渡ししたい場合に、このReference型は役立ちます。以下のコードのようなのクラス。

class Reference
{
 public var value:Object;
 public function Reference (value:Object) { this.value = value }
 public function valueOf () : Object { return value.valueOf(); }
 public function toString () : String { return value.toString(); }
}

このクラスを使うと得られる利点は、「値の読み取りならvalueプロパティを介さずに行える」というコト。以下、いくつか例を挙げます。

数値の場合。

// 参照渡しされたデータを変更するメソッド
function change (ref:Reference) : Void { ref.value = 3; }

var ref:Reference = new Reference(1);
trace(ref); // 1
change(ref);
trace(ref); // 3 ←変更されている
trace(ref+2); // 5 ←数値として計算できている

文字列も同じように出来るので省略。論理型の場合だけ少し工夫が必要で、明示的にtrueと等しいか比べてやることで正しく値を読み取ることが出来ます。

// 参照渡しされたデータを変更するメソッド
function change (ref:Reference) : Void { ref.value = false; }

var ref:Reference = new Reference(true);
if(ref==true) { trace("true"); } else { trace("false"); } // true
change(ref);
if(ref==true) { trace("true"); } else { trace("false"); } // false

勿論値の設定をする場合はvalueプロパティを介さないとダメです。

この記事へのトラックバック

トラックバックはありません。

TrackBack URL:

http://www.be-interactive.org/trackback.php?id=56

この記事へのコメント

コメントはありません。

コメント書き込み: