ActionScript3 で、グローバル変数の値が関数間でうまく引き渡せない・・・と思って今日一日ハマってましたが・・・
とんだ誤解だった・・・
というか、イベント駆動型のプログラムを触るのが久しぶりなので、すっかり頭の中がこんがらがっていた。とほほ。
結局、以下のようなテスト用プログラムを作って、関数間でちゃんと値の受け渡しがされていることを確認して、己の思い違いに気づいた。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="mainProc();">
<mx:Script>
<![CDATA[
public var arrayGlobal:Array = new Array(); // グローバル変数の宣言
private function mainProc():void {
arraySet(); // 配列(グローバル変数)に値をセットする関数を呼ぶ
trace("ARRAY COUNT=" + arrayGlobal.length);
trace("0=" + arrayGlobal[0]);
trace("1=" + arrayGlobal[1]);
}
private function arraySet():void {
arrayGlobal.push("This is a pen.");
arrayGlobal.push("My name is Ken Oka.");
}
]]>
</mx:Script>
</mx:WindowedApplication>
これで、コンソールには、
ARRAY COUNT=2
0=This is a pen.
1=My name is Ken Oka.
と表示される。まともに動いてる。グローバル変数の宣言の仕方がおかしいんじゃろうか?と、ずっとそればかり調べていたが、調べるべき方向性を間違っていたということだ。恥ずかし・・・(^^;
結局、イベント駆動される関数の中でセットされるグローバル変数(配列型)の中身を、そのイベントも発生していないうちから別の関数でチェックしていたという大ポカだった。
やっぱ、「???」と思ったら、素直にテストプログラムを書いてみるのが一番じゃね。
最近は、ついついネット上に似たような症状の話が載っていないか、そっちばかり探してしまう。
反省、反省。
コメントする