Я читаю о дротике, и меня смущает синтаксис анонимных функций. В частности, как указать тип возвращаемого значения для такой функции.
Например, рассмотрим следующее:
var f = (int x) {return x + 1;};
В этом случае я заявляю, что тип параметра x - int. Как я могу явно сказать, что функция возвращает int? Я понимаю, что компилятор, вероятно, поймет это, используя вывод типа, но я хочу явно указать тип, чтобы предотвратить возможность возврата значения неправильного типа при написании более сложных функций.
Вы можете объявить анонимную встроенную функцию, как обычную функцию.
int count(int a, int b) {
int innerThing(int c, int d) => c + d;
return innerThing(a, b);
}
Это могло быть проще.
Это по определению не анонимно, так как часть имени является обязательной. Это хороший обходной путь, но он не отвечает на заданный вопрос.
Вы можете сделать что-то вроде этого:
int Function(int x) f = (int x) {return 1 + x;};
String Function(String x, String y) concatenate = (String x, String y) {return '$x$y';};
Обновлено:
Вот более простой способ использования приведения типов:
int f = (int x) {return x + 1;} as int;
последний пример больше не действителен - если он когда-либо был
Также вы можете использовать typedef, если планируете использовать встроенный тип функции несколько раз.
typedef CalcCallback = int Function(int a, int b);
enum Operation {
sum,
diff,
}
CalcCallback calc(Operation operation) {
CalcCallback sum = (int a, int b) => a + b;
CalcCallback diff = (int a, int b) => a - b;
return operation == Operation.sum ? sum : diff;
}
void main() {
print(calc(Operation.sum)(5, 5)); // 10
print(calc(Operation.diff)(20, 5)); // 15
}
Да, я подумал, что это возможно. Я надеялся, что смогу этого избежать. Я чувствую, что это ограничивает полезность анонимных функций. Это также одно из мнений, которое мне не нравится в питоне.