Тип возврата анонимной функции

Я читаю о дротике, и меня смущает синтаксис анонимных функций. В частности, как указать тип возвращаемого значения для такой функции.

Например, рассмотрим следующее:

var f = (int x) {return x + 1;};

В этом случае я заявляю, что тип параметра x - int. Как я могу явно сказать, что функция возвращает int? Я понимаю, что компилятор, вероятно, поймет это, используя вывод типа, но я хочу явно указать тип, чтобы предотвратить возможность возврата значения неправильного типа при написании более сложных функций.

20
0
7 880
3

Ответы 3

Вы можете объявить анонимную встроенную функцию, как обычную функцию.

int count(int a, int b) {
  int innerThing(int c, int d) => c + d;

  return innerThing(a, b);
}

Это могло быть проще.

Да, я подумал, что это возможно. Я надеялся, что смогу этого избежать. Я чувствую, что это ограничивает полезность анонимных функций. Это также одно из мнений, которое мне не нравится в питоне.

safsaf32 13.08.2018 18:50

Это по определению не анонимно, так как часть имени является обязательной. Это хороший обходной путь, но он не отвечает на заданный вопрос.

Steven Penny 20.09.2020 00:02

Вы можете сделать что-то вроде этого:

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;

последний пример больше не действителен - если он когда-либо был

Steven Penny 22.09.2020 04:54

Также вы можете использовать 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
}

Другие вопросы по теме