Apr 29

AS3 関数 引数への参照渡しについて

actionscript3 コメントはページの下に

ActionScript3では、関数の引数は基本的に参照渡しとのこと。
http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000055.html

値はすべてオブジェクトとして格納されているので、すべてのパラメータは参照渡し。
ただ、Boolean,Number,int,uint,Stringなどのプリミティブデータ型に属するオブジェクトについては、値渡しのように動作する。

function test( val:int ):void {
 //valは値渡しなので呼び出したときの引数m_valのコピーが渡されてきている
  val++;
}
var m_val:int = 1;
test( m_val );
trace( m_val );

ってやってtraceしてみるとm_valは1。関数testの引数には値渡しなのでコピーが作成されるってことか。

うーーん。でも関数内で値変更したいってときもあるだろうに。

 値をintオブジェクトではなくObject型として宣言する

Adobe Docsを見てもわかるとおり、Object型とかで宣言しすればOK。

function test2( obj:Object ):void {
  //objは参照渡しなのでm_objを見ている
  obj.val++;
}
var m_obj:Object = {val:1};
test2(m_obj);
trace( m_obj.val );

これで、trace結果は2になる。

でもなんか嫌だ

これだと、Object型で宣言しなきゃダメになっちまう。プリミティブ型をオブジェクトに一時的にキャストしてしまえばいいと思うのだが。うーん、自分の能力足らず・・・誰か知っていたら教えてください。
今回の例なら戻り値でOKだが、引数が複数になってそのうちのいくつかってなったらねぇ・・・

前後の記事

関連した記事

トラックバック&Pingback

この記事が気に入ったりした方は、自分のブログを書くときに「下のURLをコピーして、自分のブログ投稿時のトラックバック欄にペースト」してください。つながります。
URL:

コメント ( 0 )

コメント記入欄

Copyright(c) 小山太郎.com All rights reserved.