2016-06-08 4 views
0

편집 : 답변을 찾았습니다. 게시물의 끝 부분을 참조하십시오.스칼라에서 익명 함수에 대한 결과 유형을 지정할 수없는 이유는 무엇입니까?

계속 오류가 발생했습니다. 결과 유형을 람다에 추가하려고했기 때문입니다. 이

(p: Int): Int => p

불만을 야기

(p: Int) => p

반면 괜찮습니다. 나는 놀랐다. 왜 그것을 허락하지 않느냐? 결국 나는 람다 할당하면 (내가 가독성에 대한 유형을 괄호 한) 변수의 유형을 지정할 수 있습니다

val f2: (Int => Int) = (p: Int) => p

을하지만 그때 나는 수도뿐만 아니라 def 그것을 :

def f2(p: Int): Int = p

나는 그것을 금지하는 데 명백한 해를 끼칠 수는 없지만 예상치 못한 결과입니다. 생각?


편집 : 석재 나, 당신은 할 수 있습니다

(p: Int) => p : Int

OK, 대답했다. 전에는 본 적이 없어요. 나는 후손을 위해 여기에두고 갈 것 같아.

+0

당신은 추가해야 성공 질문이 닫혀 질 수 있도록 여분의 대답 –

+0

@ 0__ : 할 것입니다. – user3779002

답변

1

제안에 따라 0__, 대답은 형식으로 람다의 본문 뒤에 붙는 것이고 def 구문에 의해 제안 된 것처럼 매개 변수 목록 뒤에 넣지는 않습니다.

실제 내가 목록을 destructure 및 제 2 개 항목의 튜플 반환, 사용 된 예 :

(p: List[Int]): Tuple2[Int, Int] => { val x :: y :: rest = p; (x, y) }

이 실패, 그러나 이것은

(p: List[Int]) => { val x :: y :: rest = p; (x, y) }: Tuple2[Int, Int]

관련 문제