Haxe で無名関数を arguments.callee でアレしようと思ったらダメだったので困った

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 書きだしで取れないなど色々前途多難でアレ。周りにユーザーがいないとこういうときにツライ。