확장(extension)에 정의되지 않은 연산자

확장(extension)에 정의되지 않은 연산자

이 진단은 특정 확장(extension)에 대해 연산자를 호출했는데, 그 확장이 해당 연산자를 구현하지 않았을 때 analyzer가 만들어 내는 진단이에요. 확장을 쓸 때 흔히 마주치는 오류라서 원인과 해결 방법을 함께 정리해 드릴게요.

출처: undefined_extension_operator

본문

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 {}

더 알아보기