relational_pattern_operand_type_not_assignable 진단: 관계 패턴의 피연산자 타입이 연산자 파라미터와 맞지 않아요
relational_pattern_operand_type_not_assignable 진단: 관계 패턴의 피연산자 타입이 연산자 파라미터와 맞지 않아요
Dart 분석기가 내보내는 진단에는 이름이 있어요. relational_pattern_operand_type_not_assignable은 관계 패턴(relational pattern)의 피연산자 타입이, 호출될 연산자의 파라미터 타입에 할당될 수 없을 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. 관계 패턴에서 실제로 어떤 연산자가 호출되는지, 그리고 그 연산자가 요구하는 타입이 무엇인지를 짚어주는 진단이에요.
본문
설명
분석기는 관계 패턴의 피연산자 타입이, 호출될 연산자의 파라미터에 할당될 수 없는 타입일 때 이 진단을 만들어요. 다시 말해 패턴에 쓴 값과 연산자가 기대하는 값의 타입이 서로 안 맞는다는 뜻이에요.
예시
다음 코드는 관계 패턴의 피연산자(0)가 int인데, C에 정의된 > 연산자는 C 타입의 객체를 기대하기 때문에 이 진단을 만들어요.
class C {
const C();
bool operator >(C other) => true;
}
void f(C c) {
switch (c) {
case > 0:
print('positive');
}
}
흔한 해결 방법
switch가 올바른 값을 사용하고 있다면, case가 비교하는 값을 올바른 타입의 객체로 바꿔요.
class C {
const C();
bool operator >(C other) => true;
}
void f(C c) {
switch (c) {
case > const C():
print('positive');
}
}
switch가 잘못된 값을 사용하고 있다면, 매칭되는 값을 계산하는 표현식을 바꿔요.
class C {
const C();
bool operator >(C other) => true;
int get toInt => 0;
}
void f(C c) {
switch (c.toInt) {
case > 0:
print('positive');
}
}