label_in_outer_scope
无法引用在外部方法中声明的标签 '{0}'。
描述
#当 break
或 continue
语句引用在其所在函数外部的方法或函数中声明的标签时,分析器会生成此诊断。不能使用 break
和 continue
语句将控制流转移到包含它们的函数之外。
示例
#以下代码会生成此诊断,因为标签 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;
}
}
}