我知道Function類可以作爲參數傳遞給另一個函數被傳遞,就像這樣:傳遞一個類型的函數作爲參數在DART
void doSomething(Function f) {
f(123);
}
但有約束的參數和返回類型的方法函數參數?
例如,在這種情況下,f
直接調用一個整數,但如果它是一個接受不同類型的函數呢?
我試過將它作爲Function<Integer>
傳遞,但函數不是參數類型。
是否有任何其他方式指定被傳遞的函數的簽名作爲參數?
我知道Function類可以作爲參數傳遞給另一個函數被傳遞,就像這樣:傳遞一個類型的函數作爲參數在DART
void doSomething(Function f) {
f(123);
}
但有約束的參數和返回類型的方法函數參數?
例如,在這種情況下,f
直接調用一個整數,但如果它是一個接受不同類型的函數呢?
我試過將它作爲Function<Integer>
傳遞,但函數不是參數類型。
是否有任何其他方式指定被傳遞的函數的簽名作爲參數?
只是爲了在蘭德爾的答案擴大,你的代碼可能看起來像:
typedef void IntegerArgument(int x);
void doSomething(IntegerArgument f) {
f(123);
}
Function<int>
看起來這將是一個不錯的想法,但問題是,我們可能要指定返回類型,以及在任意數量參數的類型。
這是typedefs的用途!
你可以有一個函數類型的參數或使用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)}');
}
飛鏢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)>[];