2017-04-11 94 views
2

我知道Function類可以作爲參數傳遞給另一個函數被傳遞,就像這樣:傳遞一個類型的函數作爲參數在DART

void doSomething(Function f) { 
    f(123); 
} 

但有約束的參數和返回類型的方法函數參數?

例如,在這種情況下,f直接調用一個整數,但如果它是一個接受不同類型的函數呢?

我試過將它作爲Function<Integer>傳遞,但函數不是參數類型。

是否有任何其他方式指定被傳遞的函數的簽名作爲參數?

回答

4

只是爲了在蘭德爾的答案擴大,你的代碼可能看起來像:

typedef void IntegerArgument(int x); 

void doSomething(IntegerArgument f) { 
    f(123); 
} 

Function<int>看起來這將是一個不錯的想法,但問題是,我們可能要指定返回類型,以及在任意數量參數的類型。

2

你可以有一個函數類型的參數或使用typedef

void main() { 
    doSomething(xToString); 
    doSomething2(xToString); 
} 

String xToString(int s) => 's'; 

typedef String XToStringFn(int s); 

void doSomething(String f(int s)) { 
    print('value: ${f(123)}'); 
} 

void doSomething2(XToStringFn f) { 
    print('value: ${f(123)}'); 
} 

DartPad example

4

飛鏢V1.23增加了一個新的語法編寫函數類型也可以工作在網上。

void doSomething(Function(int) f) { 
    f(123); 
} 

它比函數參數語法更有優勢,您還可以將它用於變量或其他想要編寫類型的地方。

void doSomething(Function(int) f) { 
    Function(int) g = f; 
    g(123); 
} 

var x = new List<int Function(int)>[];