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

Is it possible to automatically execute code when a local variable goes out of scope in Haxe?

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

当我从池中 get() 一个对象时,我有时想保证它在原始 get() 编辑的变量超出范围时返回 put()。更一般地说,我指的是 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() 调用的宏是一个好方法 - 如果我解决了这个问题,我会回答。

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

Jacek Szymański 为作用域守卫实现了这个 haxelib:https://bitbucket.org/parensoft/scopes - 它解决了问题。

由于异常处理和名称重整,生成的代码很混乱,但据我所知,这是不可避免的。