def f(x: Int)(y: Int) = x + y
과 def f(x: Int) = (y: Int) => x + y
의 차이점은 무엇입니까? 나는 후자와 같은 전자를 취급 할 때 REPL은 행복하지 않는 것여러 인수 목록과 함수 반환의 차이점은 무엇입니까?
:
scala> def f(x: Int)(y: Int) = x + y
f: (x: Int)(y: Int)Int
scala> f(42)
<console>:9: error: missing arguments for method f;
follow this method with `_' if you want to treat it as a partially applied function
f(42)
^
scala> def f(x: Int) = (y: Int) => x + y
f: (x: Int)Int => Int
scala> f(42)
res2: Int => Int = <function1>
무엇 정확한 차이가 나는 어떤 양식을 사용해야 할 때? 컴파일러에 의해 제안
글쎄, 하나는 두 개의 인수를 갖는 함수이고 하나는 하나의 인수를 취하는 함수를 반환합니다. 아니? –
내가 생각하기를 좋아하는 방식은 첫 번째는 두 개의 단항 arglist가 'Int'를 반환하는 메소드이다. (따라서'f (0)'의 결과는 여전히'(y : Int) Int' 메소드이다.) 반면 후자는 하나의 단항 arglist가 단항 함수'Int => Int'를 리턴하는 메소드입니다. 이것은 왜 오직 이전의 누락 된 밑줄의 불평을 설명합니다; 이 경우'f (0)'는 함수로 평가되지 않습니다. – Hugh