FlashとMTASCのエラー解釈の違い
記述の仕方により、Flashではコンパイルが通るのにMTASCではコンパイルが通らない、という場合が出てくることがあります。
例えば次のようなSamleクラスがあるとします。
class Sample{ private var check:Number; public function Sample(){ var scope:Sample = this; var obj:Object = new Object(); obj.test = function(){ trace( scope.check ); }; obj.test(); } }
これはFlashのコンパイルでは通ります。しかしMTASCのコンパイラの場合
type error Cannot access private field check
というエラーメッセージが表示され、obj.testメソッド内からはprivateなSampleクラスのcheck変数にはアクセスできないと言われてしまいます。
仕方がないので、Sample.checkをpublicにするか、または
var scope:Sample = this; var obj:Object = new Object(); obj.test = function(){ this = scope; trace( this.check ); };
と、obj内のthisの参照先を書き換えるか、もしくは変数scopeの型宣言を外します。
var scope = this; var obj:Object = new Object(); obj.test = function(){ trace( scope.check ); }; obj.test();
このエラー解釈はMTASCが正しいのだろうなあ、と思います。Flashのコンパイラがエラーを書き出してくれないのはなんだかいやですなあ。もし今後FlashのコンパイラがMTASCと同じエラー解釈をするようになったらば、今まで作成したものを修正しなくては…
(追記)
MTASCはどんどんバージョンアップしているので、今後もエラー解釈が変わるかもしれません
[ FLASH ] [ TOOL ] [ tips ] 投稿者 siratama : 2005年05月29日 01:55