자동 Eta 확장

자동 Eta 확장 (Automatic Eta Expansion)

메서드를 함수로 변환하는 과정이 개선됐고, 매개변수가 하나 이상 있는 메서드라면 이제 자동으로 이루어져요.

출처: Scala 3 Reference

본문

다음과 같은 메서드가 있다고 해볼게요.

def m(x: Boolean, y: String)(z: Int): List[Int]
val f1 = m
val f2 = m(true, "abc")

이 코드는 두 개의 함수 값을 만들어요.

f1: (Boolean, String) => Int => List[Int]
f2: Int => List[Int]

이제 m _ 같은 문법은 더 이상 필요하지 않고, 앞으로는 폐기(deprecate)될 예정이에요.

자동 eta 확장과 무인자 메서드(nullary method)

자동 eta 확장은 빈 매개변수 목록을 받는 "무인자(nullary)" 메서드에는 적용되지 않아요.

def next(): T

next를 단순히 참조하는 것만으로는 함수로 자동 변환되지 않아요. 그러려면 명시적으로 () => next()라고 써야 해요. _ 문법이 곧 폐기될 테니, next _라고 쓰기보다 이렇게 쓰는 편이 더 좋아요.

무인자 메서드를 자동 eta 확장에서 제외한 이유는, Scala가 암시적으로 () 인자를 삽입하는데 이게 eta 확장과 충돌할 수 있기 때문이에요. Scala 3에서는 자동 () 삽입이 제한적이지만, 근본적인 모호성은 여전히 남아 있어요. 이에 대한 더 자세한 내용은 관련 문서를 참고해 주세요.

더 알아보기 (Learn more)