2016-08-18 1 views
1

나는 대리자가 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 to Bar.bar_signal

는 처음에 나는이 incompatibility of delegate types 다음 원인 일 수 있다는 생각 대의원의

나는 웹을 검색했으나 2009 년부터 an old mailing list entry 번만 발견되어 Vala의 버그라고합니다. 그게 맞습니까? 그렇다면 7 년 후 어떻게이 버그가 아직 해결되지 않았을 수 있습니까?

답변

관련 문제