2014-05-25 2 views
1

이 작동 (x:Int,y:Int)=>_+_내가 스칼라의 밑줄에서 불일치를 발견

<console>:8: error: missing parameter type for expanded function ((x$1, x$2) => x$1.$plus(x$2)) 
       (x:Int,y:Int)=>_+_ 
          ^
<console>:8: error: missing parameter type for expanded function ((x$1: <error>, x$2) => x$1.$plus(x$2)) 
       (x:Int,y:Int)=>_+_ 
          ^

그것은 첫 번째 경우에 이후, 성공적으로 컴파일 된 익명 함수 (_+_)를 일관성 나타나지만 두 번째 경우에는 실패했습니다.

내가 놓친 부분이나 잘못 본 부분이 있습니까? 아니면 구문 정의입니까?

+0

아마도 'val f : Function2 [Int, Int, Int] = _ + _'과 같은 것을 의미했을 것입니다. –

답변

9

불일치가 없습니다. 첫 번째 경우는 다음 즉, 추가 된 두 개의 인수,이 같은 뭔가 익명 함수를 만드는 :

(1 to 5).reduceLeft((x, y) => x + y) 

두 번째 경우에, 그러나, 당신이 만드는 익명 함수는 수익률 다른 익명을 두 개의 인수와 기능는 :

(x: Int, y: Int) => ((a, b) => a + b) 

(당신이 (x: Int, y: Int) => _+_(x: Int, y: Int) => x + y과 동일,이 그렇게 아니라고 생각 것 같습니다.)

을 전나무에서 (reduceLeft 매개 변수로) 인수 유형이 알려진 컨텍스트에서 _ + _을 사용했습니다. 두 번째 경우에는 내부 함수의 매개 변수 유형을 추론 할 수없는 상황에서이 함수를 사용하는 것으로 보이며 이는 사용자의 오류와 정확히 일치합니다.

+0

알았어, 나는 밑줄을 오용한다. 도움이되는 답변에 감사드립니다. –

+0

@WeiChing, 환영합니다 :) –