연습문제 3-9(쉬움)
다음 함수를 커리한 함수로 변환하라.
fun <A, B, C, D> func(a: A, b: B, c: C, d: D): String = "$a, $b, $c, $d"
이 함수가 전혀 쓸모없다는 점에는 여러분도 동의할 것이다. 이 함수는 그냥 연습용이다.
해법
여기서도 튜플의 원소를 구분하는 콤마(,)를 화살표로 바꾸고 괄호를 추가하는 정도밖에는 할 일이 없다. 하지만 이 함수가 타입 파라미터를 받을 수 있는 영역 안에 정의해야 한다는 점을 기억하라. 프로퍼티로 함수를 정의할 수 없다. 따라서 타입 파라미터를 받기 위해 클래스나 인스턴스 또는 fun 함수를 정의해야 한다.
다음은 함수를 사용하는 해법이다. 먼저 반환할 함수를 둘러쌀, 타입 파라미터를 받는 fun 함수를 정의하자.
fun <A, B, C, D> curried()
이제 결과 함수의 시그니처를 생각해 보자. 첫 번째 파라미터는 A 타입의 값이다. 따라서 다음과 같이 쓸 수 있다.
fun <A, B, C, D> curried(): (A) ->