Передача типизированной функции в качестве параметра в Dart
Я знаю функции класс может быть передан в качестве параметра другой функции, например:
void doSomething(Function f) {
f(123);
}
но есть ли способ ограничить Аргументы и возвращаемый тип параметра функции?
например, в данном случае f
вызывается непосредственно на целое число, но что, если это функция, принимающая другой тип?
Я попытался передать его как Function<Integer>
, но функция не является параметрический тип.
Is есть ли другой способ указать сигнатуру передаваемой функции в качестве параметра?
4 ответов
Edit: обратите внимание, что этот ответ содержит устаревшую информацию. См.ответ Irn для получения более актуальной информации.
чтобы расширить ответ Рэндала, ваш код может выглядеть примерно так:
typedef void IntegerArgument(int x);
void doSomething(IntegerArgument f) {
f(123);
}
Function<int>
Кажется, что это была бы хорошая идея, но проблема в том, что мы можем захотеть указать тип возврата, а также тип произвольного числа аргументов.
Дротик v1.23 добавлен новый синтаксис для написания типов функций, который также работает в строке.
void doSomething(Function(int) f) {
f(123);
}
Он имеет преимущество перед синтаксисом function-parameter, что вы также можете использовать его для переменных или где угодно еще вы хотите написать тип.
void doSomething(Function(int) f) {
Function(int) g = f;
g(123);
}
var x = new List<int Function(int)>[];
вы можете иметь типизированный параметр функции или использовать 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)}');
}