이름 붙은 타입 인자

이름 붙은 타입 인자 (Named Type Arguments)

메서드의 타입 인자를 위치가 아니라 이름으로도 지정할 수 있게 해주는 기능이에요. 아직 실험 단계고, Scala 3.0에는 포함되지 않을 예정이에요.

출처: Scala 3 Reference

본문

참고: 이 기능은 Scala 3에서 구현됐지만, Scala 3.0의 일부가 될 것으로 기대되지는 않아요.

메서드의 타입 인자는 이제 위치뿐 아니라 이름으로도 지정할 수 있어요. 예시:

def construct[Elem, Coll[_]](xs: Elem*): Coll[Elem] = ???

val xs1 = construct[Coll = List, Elem = Int](1, 2, 3)
val xs2 = construct[Coll = List](1, 2, 3)

이름 붙은 값 인자 (x = e)와 비슷하게, 이름 붙은 타입 인자 [X = T]는 타입 파라미터 X를 타입 T로 인스턴스화해요. 이름 붙은 타입 인자는 순서대로 있을 필요가 없고(위 xs1 참고), 지정되지 않은 인자는 컴파일러가 추론해요(위 xs2 참고). 타입 인자는 전부 이름이 붙거나 전부 이름이 없어야 해요. 이름 붙은 타입 인자와 위치적 타입 인자를 섞는 것은 지원되지 않아요.

동기 (Motivation)

이름 붙은 타입 인자의 주된 이점은 위치적 인자와 달리 일부 파라미터에 대한 인자 전달을 생략할 수 있다는 거예요. 위 xs2의 정의처럼요. 빠진 타입 인자는 평소처럼 로컬 타입 추론이 추론해요. 특히 일부 타입 인자가 다른 것들로부터 쉽게 추론될 수 있는 상황에서 유용해요.