2012-09-21 2 views
0

setter가 정의 된 클래스가있는 경우 해당 클래스의 인스턴스에서 함수로 생성 된 메서드를 어떻게 참조해야합니까? 사양 일종의는 변수 + '의 ID 것이다 제안 = "(바보 같다)하지만,이 구문 분석하지 않습니다 그래서 예를 들면Dart에서 setter 메소드에 대해 생성 된 이름은 무엇입니까?

:.

class Bar { 

    set foo(int value) { 
    //whatever 
    } 
} 

typedef F(int value); 

void main() { 
    F f = new Bar().foo=; //Fails, but what should this be?? 
    f(5); 
} 

답변

2
세터가 foo= 이름

하지만, .이 당신이 심지어 다트보고 원하는 방식으로 참조 할 수있는 일이 아니다 :. MethodMirror (세터를 포함하는 객체 메소드의 거울) 거울을 호출하는 방법이 없습니다 당신은 쉽게로이를 다시 작성할 수 :

class Bar { 

    set foo(int value) { 
    //whatever 
    } 
} 

typedef F(int value); 

void main() { 
    Bar b = new Bar(); 
    F f = (int value) => b.foo = value; 
    f(5); 
} 
+0

MethodMirror.invoke()를 사용하여 미러가있는 설정기를 호출 할 수 있습니다. "set :"접두어를 붙이면 거울을 얻을 수 있습니다. –

+0

안녕 저스틴,보고 : http://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/lib/mirrors/mirrors.dart?r=10918 invoke 메소드가 표시되지 않습니다. MethodMirror에 있습니다. ObjectMirror에 하나가 있지만 F (int 값)와 매우 다른 서명을 가지고 있으므로 F에 할당 할 수 없습니다. – Cutch

+0

아, 맞아. 그것은 ObjectMirror에 있으며 setField()가있는 것처럼 보입니다. 어떤 메소드 호출도 처리해야하기 때문에 f (int v) 서명이 없으므로 noSuchMethod()와 같이 작동합니다. 또한 미러 시스템을 통해 메소드를 폐쇄 할 수 없습니다. 그것은 굉장 할 것이다. InstanceMirror.hasReflectee가 true 인 경우 멤버를 캡처 할 수 있습니다. –