pattern_constant_from_deferred_library — 지연 라이브러리의 상수를 패턴에 쓸 수 없어요
pattern_constant_from_deferred_library — 지연 라이브러리의 상수를 패턴에 쓸 수 없어요
Dart 분석기(analyzer)가 만들어내는 pattern_constant_from_deferred_library 진단에 대한 설명이에요.
본문
이 진단이 나오면 터미널에는 다음과 같은 메시지가 떠요.
Constant values from a deferred library can't be used in patterns.
즉, 지연(deferred) 라이브러리에서 온 상수 값은 패턴에서 쓸 수 없다는 뜻이에요.
언제 발생하나요?
패턴이 다른 라이브러리에 선언된 값을 포함하고 있는데, 그 라이브러리를 지연 import로 가져올 때 분석기가 이 진단을 만들어요. 상수는 컴파일 타임(compile time)에 평가되는데, 지연 라이브러리의 값은 컴파일 타임에 아직 준비되어 있지 않으니 그런 거예요.
예시
먼저 상수 zero를 정의한 a.dart 파일이 있다고 해 볼게요.
const zero = 0;
다음 코드는 상수 패턴 a.zero를 지연 import로 가져온 라이브러리에서 쓰고 있어서 이 진단이 생겨요.
import 'a.dart' deferred as a;
void f(int x) {
switch (x) {
case a.zero:
// ...
break;
}
}
어떻게 고치나요?
상수를 직접 참조해야 한다면 deferred 키워드를 빼면 돼요.
import 'a.dart' as a;
void f(int x) {
switch (x) {
case a.zero:
// ...
break;
}
}
상수를 참조하면서도 라이브러리를 지연 import로 유지해야 한다면, switch 문을 if 문들의 나열로 다시 쓰면 돼요.
import 'a.dart' deferred as a;
void f(int x) {
if (x == a.zero) {
// ...
}
}
상수를 굳이 참조할 필요가 없다면, case 표현식을 다른 값으로 바꿔도 돼요.
void f(int x) {
switch (x) {
case 0:
// ...
break;
}
}
더 알아보기
- 라이브러리 지연 로딩 문서 — 지연 import가 왜 필요한지, 언제 쓰면 좋은지 자세히 볼 수 있어요.
- 패턴 문서 — 상수 패턴을 포함한 패턴 문법을 더 알아볼 수 있어요.