当局部变量超出 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 - 它解决了问题。
由于异常处理和名称重整,生成的代码很混乱,但据我所知,这是不可避免的。
我正在寻找一种方法,当局部变量超出 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 - 它解决了问题。
由于异常处理和名称重整,生成的代码很混乱,但据我所知,这是不可避免的。