Функция, принимающая функцию аргумента - Дарт - PullRequest
0 голосов
/ 24 октября 2018

В чем разница между

void test1(void fun(String element)) {
  fun("Test1");
}

//AND

void test2(Function(String element) fun) {
  fun("Test2");
}

Я попытался запустить оба из них и не могу найти никаких различий в выводе:

void main() {
  test1((test) => print(test));
  test2((test) => print(test));
}

void test1(void fun(String element)) {
  fun("Test1");
}

void test2(Function(String element) fun) {
  fun("Test2");
}

// Output:  
// Test1   
// Test2

Я новичок в Dart IЯ всегда использовал Java, поэтому передача функции в функцию - это что-то новое для меня, поэтому, если кто-то сможет объяснить мне, в чем разница в приведенном выше коде, буду очень признателен.

1 Ответ

0 голосов
/ 24 октября 2018

Нет реальной разницы между объявлением параметра функции с типом функции, предшествующим имени (void Function(String) fun), или в виде (С-подобного) функционально-подобного синтаксиса, где имя находится в середине (void fun(String element)),Оба объявляют аргумент с именем fun с типом void Function(String).

У Dart изначально не было способа написать тип функции в строке, вам пришлось использовать typedef, поэтому в большинстве старых кодов используетсяvoid fun(String element) обозначение.Когда была введена нотация returnType Function(arguments) (так как она была необходима для указания универсальных типов функций), стало проще писать типизированные параметры функции с типом first.

Оба используются, ни идиоматично, ни использоватьВы думаете, что читается лучше.

Существует одно различие между двумя форматами, которые стоит запомнить:

  • Для записи void fun(String element) требуются имена для аргументов функции.Если вы пишете void fun(String), это интерпретируется как функция, принимающая один аргумент типа dynamic с именем String.
  • В нотации void Function(String) fun предполагается, что типом является имя одного аргумента.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...