如何在匿名函数中仅微弱地捕获this
?
我无法在文档中找到关于是否(或如何)调用匿名函数/ lambda表达式捕获的变量的任何内容。问题是这些函数似乎捕获了堆栈帧中的所有变量,至少在默认情况下是创建它们的。特别是,它们总是捕获this
,这在将它们用于信号处理程序时会出现问题,因为处理程序会变成对this
的硬引用,这可能导致引用循环。
Vala是否有一些关于如何防止lambdas捕获this
的硬引用的机制?目前,我正在为每个信号处理程序创建一个新类,例如A.Handler
,其中我只保留对this
的实际A
的弱引用,我需要从中引用处理程序内部,但我认为这会破坏lambda表达式的好处。
答案 0 :(得分:1)
在lambda里面,没有。标准方法是:
class Foo : Whatever {
public Foo {
unowned Foo unowned_this = this;
this.bar_signal.connect(unowned_this.bar_handler);
}
private void bar_handler() {
...
}
}
这不会捕获对此的引用,但您也无法捕获任何其他变量。