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


