label_in_outer_scope 진단: 바깥 메서드에 선언된 라벨 참조
label_in_outer_scope 진단: 바깥 메서드에 선언된 라벨 참조
Dart 분석기가 만들어 내는 label_in_outer_scope 진단에 대해 설명해요.
본문
바깥 메서드에 선언된 라벨 {0}은(는) 참조할 수 없어요.
설명
분석기는 break 또는 continue 문이 그 문이 나타나는 함수를 포함하는 메서드나 함수에 선언된 라벨을 참조할 때 이 진단을 만들어요. break와 continue 문은 그들을 포함하는 함수의 바깥으로 제어 흐름을 옮기는 데 사용할 수 없어요.
예시
다음 코드는 라벨 loop이 지역 함수 g의 바깥에 선언되어 있기 때문에 이 진단을 만들어요.
void f() {
loop:
while (true) {
void g() {
break loop;
}
g();
}
}
흔한 해결 방법
지역 함수의 바깥으로 제어 흐름을 옮기지 않아도 되도록, 아마도 지역 함수를 인라인해서 코드를 다시 작성해 봐요.
void f() {
loop:
while (true) {
break loop;
}
}
그게 불가능하다면, 함수가 반환하는 값을 사용해 제어 흐름을 옮길지 결정하도록 지역 함수를 다시 작성해 봐요.
void f() {
loop:
while (true) {
bool g() {
return true;
}
if (g()) {
break loop;
}
}
}