この記事のURL

http://www.dango-itimi.com/blog/archives/2005/000740.html


FLASH TOOL tips 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

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/702

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]