ActionScript3.0の変数初期化について一言(誤解だった模様)
えらそうにぐだぐだ書きましたが、誤解だったようです。ご迷惑をおかけしました。
とはいえ、本当にこういう動作をしないのか?と言われると「しない!」とも言えないので(「しない!」と言えるだけの知識が無いので)一応残しておきます。
ActionScript3.0は、以下のようにローカル変数を宣言できます。
//function foo():void{ // // var loader:URLLoader() = new URLLoader(); // // //なんらかの処理 // // loader.load(); // //}
で、このメソッド内の処理を、「try-catchでかこって例外処理をしたい!」と思って以下のように書いたとします。
//function foo():void{ // // try{ // var loader:URLLoader() = new URLLoader(); // // //なんらかの処理 // // loader.load(); // }catch(error:Error){ // trace(error); // } //}
これでErrorがキャッチされるはず・・・と思いきや。
ActionScriptのコンパイラ(FlexSDK)はメソッド内の変数宣言を一番最初に持って来てくれるという、(Java使い的にはよく分からない)仕様になっているため、実際にコンパイルされた中身は(きっと)こんな感じになっています。
//function foo():void{ // // var loader:URLLoader() = new URLLoader(); //ココで発生した例外はどうなる? // // try{ // // //なんらかの処理 // // loader.load(); // }catch(error:Error){ // trace(error); // } //}
そんな仕様のおかげで、new URLLoader()で例外が発生すると「キャッチされない例外」が発生します。
(デバッガモードのFlash Playerの場合は例外を表すダイアログが表示され、デバッガモードじゃないFlash Playerの場合は何も表示されません。)
上記問題を回避するには、
//function foo():void{ // // try{ // // var loader:URLLoader(); //変数宣言部分だけが最初にいくっぽい // loader = new URLLoader(); //ココはtry-catchの中のまま // // //なんらかの処理 // // loader.load(); // }catch(error:Error){ // trace(error); // } //}
みたいに書くと良さげです。
NNDDのDLが100%で止まる原因はこれだったっぽいですよ・・・。