2012-04-03 4 views
6

나는 스칼라에 새로운 오전, 다음 코드를 이해하려고 노력은 내가 "1 +"점 (B)에서와 같은 고려 얼마나 이해하지어떻게 (1 +) 함수가 될 수 있습니까?

scala> def w42(f: Int => Int) = f(42) //(A) 
w42: (f: Int => Int)Int 

scala> w42 (1 +)  //(B) 
res120: Int = 43 

(태초 스칼라 책의 예에서 파생) 점 (A)에서 w42 정의를 만족하는 함수 (Int 1 매개 변수를 취하고 Int를 반환)?

해답이있는 문서를 설명해 주시겠습니까?

답변

11

간단합니다. 스칼라 1 + 21.+(2) 이상의 구문 설탕 일뿐입니다. 이 함수 인 것처럼 당신이 1 +를 사용할 수있는 이유

final class Int extends AnyVal { 
    def +(x: Int): Int = //... 
    //... 
} 

이것은 :이 IntInt을 받아 +라는 방법을 의미합니다. 이하 예기치 않은 방식으로 명명 예 :

scala> def s42(f: String => String) = f("42") 
s42: (f: String => String)String 

scala> s42("abc".concat) 
res0: String = abc42 

BTW 기술적 말하기, ETA 팽창 함수로 변환 방법도 복잡하다.

+4

유용한 힌트 : '1 +'은 '1 + _'이 'x => 1 + x'을 의미 함을 의미합니다. – sschaef

+0

감사의 말 Tomasz 추가 예제. – lastrinh1296773

+0

유용한 힌트는 Antoras에게 감사드립니다. – lastrinh1296773

관련 문제