스칼라 스터디 중, 다음과 같은 코드가 왜 오류가 발생하는지 의문이 생겼다. (코드는 재구성함)

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))

이런 현상이 발생하는 이유를 생각해보았다.

  1. f(_)a => f(a) 와 동일하다.
  2. _ + 1_.$plus(1) 과 동일하다.
  3. _.$plus(1)a => a.$plus(1) 과 동일하다.
  4. 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

+ Recent posts