나는 대리자가 Vala에서 메서드 참조와 같이 동작한다고 생각했습니다. 그러나, 나는 다음과 같은 코드가 작동하지 않는 이유를 이해하지 않습니다Vala가 대리인에게 신호를 연결할 수없는 이유는 무엇입니까?
class Bar {
public signal void bar_signal();
}
class Foo : Object {
public Foo(int i, Bar bar) {
bar.bar_signal.connect(bar_handler(i + 1));
}
public delegate void Handler();
private static Handler bar_handler(int j) {
return() =>
{
stdout.printf("handler: %d\n", j);
};
}
}
public static void main(string[] args) {
Bar bar = new Bar();
new Foo(1, bar); // will be finalized immediately
bar.bar_signal();
}
이 코드의 관용구가 실제로 폐쇄를 많이 사용하게 자바 스크립트에서 매우 일반적입니다. 슬프게도, valac
는 말한다 :
Instance and static delegate instances are not interchangeable.
그러나 오류가 변경되지 않습니다 내가 선언에 static
를 넣을 경우 :
Test.vala:8.33-8.45: error: Argument 1: Cannot convert from
Foo.Handler
toBar.bar_signal
는 처음에 나는이 incompatibility of delegate types 다음 원인 일 수 있다는 생각 대의원의
나는 웹을 검색했으나 2009 년부터 an old mailing list entry 번만 발견되어 Vala의 버그라고합니다. 그게 맞습니까? 그렇다면 7 년 후 어떻게이 버그가 아직 해결되지 않았을 수 있습니까?