Iterable이 아닌 값을 스프레드로 펼쳤을 때
Iterable이 아닌 값을 스프레드로 펼쳤을 때 (not_iterable_spread)
리스트나 셋 리터럴에서 스프레드 요소(spread element)를 썼는데, 그 표현식의 정적 타입이 Iterable을 구현하지 않을 때 나오는 진단이에요. 메시지는 "Spread elements in list or set literals must implement 'Iterable'." — "리스트나 셋 리터럴의 스프레드 요소는 'Iterable'을 구현해야 해요"라고 알려줘요.
본문
언제 발생하나요?
리스트 리터럴이나 셋 리터럴 안에 나타난 스프레드 요소의 표현식이, 정적 타입으로 볼 때 Iterable 타입을 구현하지 않으면 애널라이저가 이 진단을 만들어요. 리스트나 셋을 펼치려면 그 값이 반복 가능한(iterable) 대상이어야 하거든요.
예시
다음 코드는 m이 Map이라서 이 진단이 발생해요.
var m = <String, int>{'a': 0, 'b': 1};
var s = <String>{...m};
m은 Map이라 Iterable이 아니에요. 셋 리터럴 안에서 ...m처럼 펼치려면 반복 가능한 대상이어야 하는데, 맵 자체로는 반복할 수 없기 때문이죠.
어떻게 고치나요?
가장 흔한 해결책은 iterable 객체를 만들어 내는 표현식으로 바꾸는 거예요. 예를 들어 맵의 키만 가져오려면 .keys를 붙여요.
var m = <String, int>{'a': 0, 'b': 1};
var s = <String>{...m.keys};
m.keys는 Iterable<String>이니까 이제 셋 리터럴에서 정상적으로 펼쳐져요.
더 알아보기
- 컬렉션과 스프레드 문법은 Collections 문서에서 확인할 수 있어요.
- 다른 진단과 함께 보려면 Diagnostics 목록을 참고하세요.