Haxe で無名関数を arguments.callee でアレしようと思ったらダメだったので困った
ほぼ一年ぶりぐらいに Flash でなにかつくろうかと思いまして、せっかくだしここは一つ Haxe を使いましょうということになって使っていましたら困りました。
すでに記憶がさだかではないのですが、MOUSE_UP_OUTSIDE 的なものがなくなった関係で、stage にイベントを付加して MOUSE_DOWN での描画をどうにかしておりました。stage のイベントは残留してはいけないのでその都度はがす感じです。
this.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void{ doHoge(); stage.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void{ undoHoge(); stage.removeEventListener(MouseEvent.MOUSE_UP, arguments.callee); }); });
無名関数に自分自身を呼ばせるためにarguments.callee
を使っていたのですが Haxe でそれ相当の仕方がわからないので以下のようになりました。
this.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):Void{ doHoge(); var mouseUp:Dynamic -> Void = function(e:MouseEvent):Void {}; stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp = function(e:MouseEvent):Void{ undoHoge(); stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp); }); });
以下ではダメでした。
// Local variable mouseUp used without being initialized this.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):Void{ doHoge(); var mouseUp:Dynamic -> Void; stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp = function(e:MouseEvent):Void{ undoHoge(); stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp); }); });
他にもMouseEvent.ROLL_OUT
などが HTML 5 書きだしで取れないなど色々前途多難でアレ。周りにユーザーがいないとこういうときにツライ。