跳到主要內容

label_in_outer_scope

無法引用在外部方法中宣告的標籤 '{0}'。

描述

#

breakcontinue 語句引用在其所在函式外部的方法或函式中宣告的標籤時,分析器會生成此診斷。不能使用 breakcontinue 語句將控制流轉移到包含它們的函式之外。

示例

#

以下程式碼會生成此診斷,因為標籤 loop 在區域性函式 g 之外宣告。

dart
void f() {
  loop:
  while (true) {
    void g() {
      break loop;
    }

    g();
  }
}

常見解決方法

#

嘗試重寫程式碼,使其無需將控制流轉移到區域性函式外部,這可能透過內聯區域性函式來實現。

dart
void f() {
  loop:
  while (true) {
    break loop;
  }
}

如果無法做到,則嘗試重寫區域性函式,以便可以使用函式返回的值來確定是否轉移控制流。

dart
void f() {
  loop:
  while (true) {
    bool g() {
      return true;
    }

    if (g()) {
      break loop;
    }
  }
}