2012-09-21 48 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()調用一個帶有鏡像的setter,我認爲你必須使用「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是真的,它可以讓你捕獲成員。 –

相關問題