当局部变量超出Haxe的范围时,是否可以自动执行代码?

时间:2015-12-07 05:50:41

标签: scope metaprogramming haxe

我正在寻找一种在局部变量超出函数范围时使用Haxe 3.2.1自动运行某些代码的方法。

当我get()来自池中的对象时,我有时希望保证当原始put() - ed变量超出范围时它是get()。更一般地说,我的意思是像C ++中的scoped_ptr这样的行为。我认为宏可能有用,所以:

function makeWidget():Widget {
   return new Widget(PointPool.getScoped());
}

变换为:

function makeWidget():Widget {
   var __a = PointPool.get();
   var __b = new Widget(__a);
   __a.put();
   return __b;
}

但这会让我return switch...,多个return等等。所以我想知道,还有其他方法可以解决Haxe的这个问题吗?

编辑:我注意到之前有人问过类似的问题:Haxe: define a function/macro which fires when an object goes out of scope? - 它似乎是一个宏,在适当的地方插入get()put()/destroy()来电是一个很好的方法 - 如果我解决这个问题,我会回答。

1 个答案:

答案 0 :(得分:0)

之前在Haxe问题跟踪器上讨论过这种功能:https://github.com/HaxeFoundation/haxe/issues/3335

JacekSzymański为范围守卫实施了这个haxelib:https://bitbucket.org/parensoft/scopes - 它解决了这个问题。

由于异常处理和名称修改,生成的代码是一个纠结,但这是我无法避免的。