dart: почему локальные функции не могут вызывать друг друга?

#flutter #dart #local-functions

#flutter #dart #local-функции

Вопрос:

 // OK, it works!
void global_1() => global_2();
void global_2() => global_1();

void main() {
    // ERROR Local variable 'local_2' can't be referenced before it is declared.
    void local_1() => local_2(); // <=== ERROR
    void local_2() => local_1();
}
  

Компилятор сказал, что «Локальная переменная не может быть ссылкой до ее объявления»

Но почему глобальные функции могут вызывать друг друга рекурсивно, а локальные функции — нет?

Мне нужно знать, ПОЧЕМУ и несколько хороших обходных путей для этой ситуации.

Комментарии:

1. Вы могли бы обойти это, выполнив: void Function() local_2; void local_1() => local_2(); local_2 = () => local_1();

2. Для меня это нормально компилируется. скрипка

3. @PedroPerez Но ваша скрипка на C #, я сказал о dart

Ответ №1:

Я подозреваю, что это зависит от области видимости. global_1 может вызывать global_2 , потому что они оба действительны в течение всего приложения. Но local_2 не существует до тех пор, пока он не будет объявлен, то есть после его использования.