もしかしたら既にあるかもしれないけど、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

コメントはありません。