Есть ли в Vala способ, чтобы несколько обработчиков сигналов выполняли один и тот же код, в то время как они имеют доступ к локальной области видимости?
Определение лямбды с использованием делегата работает, но требует определения делегата и выдает предупреждение «копирование делегатов не поддерживается»:
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);
});
}