확장(extension)에 정의되지 않은 연산자
확장(extension)에 정의되지 않은 연산자
이 진단은 특정 확장(extension)에 대해 연산자를 호출했는데, 그 확장이 해당 연산자를 구현하지 않았을 때 analyzer가 만들어 내는 진단이에요. 확장을 쓸 때 흔히 마주치는 오류라서 원인과 해결 방법을 함께 정리해 드릴게요.
본문
The operator '{0}' isn't defined for the extension '{1}'. — 확장 {1}에 연산자 {0}이 정의되어 있지 않다는 뜻이에요.
설명 (Description)
이 진단은 특정 확장(extension)에 대해 연산자를 호출하는데, 그 확장이 해당 연산자를 구현하지 않았을 때 analyzer가 만들어 내요.
예시 (Example)
다음 코드는 확장 E가 연산자 *를 정의하지 않았기 때문에 이 진단이 발생해요.
var x = E('') * 4;
extension E on String {}
해결 방법 (Common fixes)
확장이 연산자를 구현하도록 기대한다면, 확장에 연산자 구현을 추가하면 돼요.
var x = E('') * 4;
extension E on String {
int operator *(int multiplier) => length * multiplier;
}
만약 해당 연산자를 다른 확장이 정의하고 있다면, 확장의 이름을 그 연산자를 정의한 확장의 이름으로 바꾸면 돼요.
또는 연산자가 확장 오버라이드(extension override)의 인자(argument)에 정의되어 있다면, 확장 오버라이드를 제거하면 돼요.
var x = '' * 4;
extension E on String {}