스칼라 스터디 중, 다음과 같은 코드가 왜 오류가 발생하는지 의문이 생겼다. (코드는 재구성함)
val t = Seq(1.0,2.0,3.0)
t.map(math.pow(_ + 1,2))
// error: missing parameter type for expanded function ((<x$1: error>) => x$1.$plus(1))
타입 추론이 잘 안되는가 싶어서, 아래와 같이 해도 동일한 오류가 발생한다.
t.map((_:Double) => math.pow(_ + 1,2))
// error: missing parameter type for expanded function ((<x$2: error>) => x$2.$plus(1))
아래와 같이 하면 문제가 없다.
t.map(_+1).map(math.pow(_,2))
혹은, 아래와 같이 하면 문제가 없다.
t.map(x => math.pow(x + 1,2))
이런 현상이 발생하는 이유를 생각해보았다.
- f(_) 는 a => f(a) 와 동일하다.
- _ + 1 은 _.$plus(1) 과 동일하다.
- _.$plus(1) 은 a => a.$plus(1) 과 동일하다.
- math.pow(_ + 1,2) 는 math.pow(a => a.$plus(1),2) 와 동일??
위의 흐름이라면, Double이든 Int 이든 값이 들어가야할 자리에 함수가 들어가면서 문제가 발생한 것으로 보이는데, 맞는지는 잘 모르겠다.
'Developing' 카테고리의 다른 글
| Brackets 개발 중단 (0) | 2021.03.09 |
|---|---|
| Spring Social 개발 중단 소식 (0) | 2018.07.07 |
| Programming in Scala 스터디 정리 - 22장. 리스트 구현 (0) | 2017.10.14 |