跳到主要内容

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;
    }
  }
}