문제 설명

스칼라에서 익명 함수(Anonymous Function)는 다음과 같은 형태로 정의합니다.

// 이 함수의 타입은 하나의 Int형 매개변수를 받아 Int형으로 그 제곱을 리턴하는 Int => Int입니다.
(x: Int) => x * x

// 이 함수의 타입은 두 개의 Int형 매개변수를 받아 그 합을 Int를 리턴하는 (Int, Int) => Int입니다.
(x: Int, y: Int) => x + y

익명 함수는 타입을 가지는데요. 예를 들어 다음 코드의 doWithOneAndTwo를 보면 (Int, Int) => (Int)와 같은 타입의 익명 함수만 받아들입니다.
따라서 코드 13번째 줄과 같이 (x, y) => x + y와 같은 익명 함수를 매개변수로 사용할 수 있습니다.
여기서 x와 y의 타입을 지정하지 않고 생략했는데요. 컴파일러가 코드 4번째 줄을 보고 타입을 알 수 있기 때문입니다.

추가로 더 짧게 변수명을 생략할 수도 있습니다. x와 y가 익명 함수의 Body에서 딱 한 번만 사용된다면 _로 대체할 수 있는데요. 익명 함수의 Body에 나타나는 _의 순서는 매개변수에 정의된 순서대로 입니다.
예를 들어 _ / _x/y와 같습니다.

하지만 만약 y/x처럼 순서를 바꿔서 표현하고 싶으면 까다로워지는데요. (1/_)*_라고 표현해야겠지요. (1/x)*yy/x이니까요.

실행 결과 실행 중지