- This topic has 2개 답변, 2명 참여, and was last updated 1 year, 11 months 전에 by Zizi_Kim.
-
글쓴이글
-
-
Zizi_Kim참가자
- 글작성 : 1
- 답글작성 : 1
책: Swift 3판 (야곰, 한빛미디어), P. 443 (코드 23-6)
안녕하세요. 책을 보고 공부하다 지네릭스 적용과 해석이 헷갈려 질문드립니다.
func map<T>(transform: (Element) -> T) -> Stack<T> {
var mapStack: Stack<T> = Stack<T>()
for item in items {
mapStack.items.append(transform(item))
}
return mapStack
}
var stack: Stack<Int> = Stack<Int>()
<..생략..>
stack = stack.map { Double($0 * 3) } // 에러 코드 Cannot convert value of type ‘Double’ to closure result type ‘Int’ – 질문 코드입니다.
print(stack.items)
map 함수 구현에서 타입 매개변수를 Element와 T를 사용했는데, T는 언제 타입이 결정되는 건가요? transform(_:) 함수에서 결과값이 반환될 때 결정되는 건가요?
Double 타입으로 변환하려니 에러가 출력됩니다. 반환 타입은 타입 매개변수 T이므로 Double 타입으로 반환을 해도 문제가 없다고 생각되는데, 에러가 뜨니 이유를 모르겠네요.
답변 정말 감사드립니다.
2023-01-21 오후 4:44 #57424 -
rhrnakrnakr참가자
- 글작성 : 0
- 답글작성 : 40
음 일단 문제에 대해 답변을 드리기에 앞서서, 현상을 인지하는 게 선행되어야할 것 같습니다.
아마 에러는 코드를 작성하고 계시던 중에 발생했을텐데요. 코드를 작성을 하던 도중에 에러가 나왔다는 건, 일반적으로 해당 문제가 빌드 과정에 인지할 수 있고, 또 평가된다는 이야기입니다.
따라서 제네릭은 컴파일 타임에 평가됩니다.
말씀하신 결과값이 반환될 때는 런 타임이구요. 용어가 낯설다면 따로 찾아보시면 좋겠습니다.
에러가 뜨는 이유는 컴퓨터가 말을 해주고 있네요. 위의 내용을 토대로 제네릭을 따로 공부해보시고 다시 고민해보시면 좋겠습니다
2023-02-03 오후 4:06 #57562
-
-
글쓴이글
- 답변은 로그인 후 가능합니다.