당신이 쓸 때
{I : 지능 => 2 * 내가}
괄호는 블록, 그리고 것은 내부 블록의 결과 표현이다.
구문은 the ResultExpr here입니다. 위와 같이 매개 변수 이름 다음에 형식을 사용할 수 있습니다.
이것은 an Expr과 다릅니다.
여기서 차이점의 예 : 블록
scala> val is = List(1,2,3)
is: List[Int] = List(1, 2, 3)
제 문 우리 유형을 지정하는 경우 괄호를 요구 리터 함수 expr이있다.마지막 문은 블록의 결과 표현이며, 어떤 괄호는 필요하지 않습니다 :
scala> is map { val f = (i: Int) => 2*i; i: Int => 2*f(i) }
res0: List[Int] = List(4, 8, 12)
때때로 당신이 예상되는 형태로부터 추정되기 때문에 유형을 지정할 필요가 없습니다, 그리고 EXPR에없는 유형 , 당신은 괄호를 생략 할 수 있습니다 :
scala> is map { val f: Int=>Int = i => 2*i; i: Int => 2*f(i) }
(사양)에이 작품의 Bindings 아마 유형이 괄호에 PARAMS의 평범한 목록입니다. 하나 이상의 PARAM으로, 당신은 괄호을 제공해야 :
scala> is reduce { val f = (i:Int,j:Int) => i+j; (i:Int,j:Int) => 2*f(i,j) }
res2: Int = 18
때때로 당신이 함수에 인수로 코드의 큰 블록을 볼 수 있습니다. 즉, 어떤 괄호 나 중괄호, 매개 변수가 앞에 밖으로 앉아 볼 이유 블록의 결과 표현식 리터럴 큰 기능입니다 :의 블록에 다음 코드, 다른
scala> is map { i => val j = 2 * i; /* lots of LOC */ ; j }
res7: List[Int] = List(2, 4, 6)
많은 끝에는 함수 리터럴 코드가 있습니다. 이 기능은 j
, 또는 2를 반환
scala> is map { val j = 2; /* lots of LOC */ ; _ => j }
res8: List[Int] = List(2, 2, 2)
그래서 우리는 당신이 다음 쓸 수 있다는 사실을 알고 :
이
scala> is map (is: Int => 2)
<console>:1: error: identifier expected but integer literal found.
is map (is: Int => 2)
^
식별자 어떤 종류의이 맥락에서 의미가있을 것인가? 방법에 대해 :
scala> val js = List(0,1,2)
js: List[Int] = List(0, 1, 2)
scala> js map (js: Int => Int)
res0: List[Int] = List(0, 1, 2)
괄호의 js
분명히 단지 값이 아니라을이다 :
java.lang.IndexOutOfBoundsException: 3
이 작동 : (스포일러 경고) 즐거운 결과를 얻을 수
scala> is map (is: Int => Int)
param이며 유형은 유형 어미 션입니다. 값은 이후 수정 표현 될 수있다, 그래서 이것은 (이후 수정 연산자 구문에 대한 경고 기능 또는 오히려, 컴파일) 작동 :
scala> js map (js init: Int => Int)
warning: there were 1 feature warning(s); re-run with -feature for details
java.lang.IndexOutOfBoundsException: 2
이 답변에
더 설명 :
https://stackoverflow.com/a/13873899/1296806
괄호와 중괄호를 어떻게 든 교환 할 수 있다고 생각하면 혼동의 범주가 있습니다. 하지만 중괄호가 BlockExprs
인 것을 분명히하는 것으로 나타났습니다. 그런 다음 예를 들어 함수 응용 프로그램에서 중괄호를 사용하면 마법이 없음을 기억하는 것이 더 쉽습니다. 즉, 단순히 block을 제공했습니다.
블록은 결과 문 다음에 부작용이있는 명령문의 묶음입니다. 아마도 기능적 프로그래머에게는 분명합니다. 그러나 중괄호의 마지막 항목은 ResultExpr
입니다.
(각주 :. 급 기관에 대한 괄호는 물론, 다른)
더 많은 대는 전쟁 교정기 :이 읽을 수 있기 때문에 값이 형식 T => E로 입력 x를로 다음은, 불법 HTTP : //stackoverflow.com/a/4387118/1296806 "추측 괄호"에 대한 대답은 무시하십시오. –