【发布时间】:2018-10-31 00:35:53
【问题描述】:
在 Vala 中有没有办法让多个信号处理程序执行相同的代码,同时它们可以访问本地范围?
使用委托定义 lambda 有效,但需要委托定义并给出警告“不支持复制委托”:
delegate void ChangeHandler ();
void test () {
var answer = 42;
ChangeHandler handler = () => {
debug("size or position changed. answer: %i", answer);
};
size_changed.connect (handler);
position_changed.connect (handler);
}
据我所知,也没有办法将信息传递给处理程序?类似:
void test () {
var answer = 42;
size_changed.connect (handler, answer);
position_changed.connect (handler, answer);
}
void handler (answer) {
debug("size or position changed. answer: %i", answer);
}
我可以这样做,但这需要很多额外的代码,尤其是当有很多参数时。
void test () {
var answer = 42;
size_changed.connect (handler, answer);
position_changed.connect (() => handler(answer));
}
void handler (answer) {
debug("size or position changed. answer: %i", answer);
}
有没有办法将多个信号连接到一个匿名函数?比如:
void test () {
var answer = 42;
multi_connect(size_changed, position_changed, () => {
debug("size or position changed. answer: %i", answer);
});
}
【问题讨论】:
标签: vala