我正在寻找一种在局部变量超出函数范围时使用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的这个问题吗?
get()
和put()/destroy()
来电是一个很好的方法 - 如果我解决这个问题,我会回答。
答案 0 :(得分:0)
之前在Haxe问题跟踪器上讨论过这种功能:https://github.com/HaxeFoundation/haxe/issues/3335
JacekSzymański为范围守卫实施了这个haxelib:https://bitbucket.org/parensoft/scopes - 它解决了这个问题。
由于异常处理和名称修改,生成的代码是一个纠结,但这是我无法避免的。