int x = 1;
Consumer<Object> f = (i) -> {
int x = 1; // invalid
};
Consumer<Object> f = (i) -> {
int x = 1;
};
int x = 1; // valid
는 방법 안에 두 블록을 상상해보십시오. 왜 두 번째 블록이 유효합니까?
int x = 1;
Consumer<Object> f = (i) -> {
int x = 1; // invalid
};
Consumer<Object> f = (i) -> {
int x = 1;
};
int x = 1; // valid
는 방법 안에 두 블록을 상상해보십시오. 왜 두 번째 블록이 유효합니까?
첫 번째 블록에서 "shadowing"원래 x
변수입니다. 새 x
을 작성하여 처음으로 x
에 액세스 할 수 없습니다. 제 x
(이것은 범위에서 임) 이상 존재하지 않을 때 제 x
이 순간에 생성되기 때문에
제 2 블록은 괜찮다.
기본적으로 : 첫 번째 경우에는 x
이라는 두 개의 변수를 동시에 사용하려고합니다. 두 번째 경우에는 두 개의 변수가 서로 뒤 따르는 두 개의 변수를 만듭니다. 수명이 겹치지 않습니다.
이 정상 자바 범위와 매우 유사하다 :
int i;
{
int i; // invalid
}
대 다음 "범위"대칭 밤은 왜
{
int i; // valid
}
int i;
나는 똑같은 것을 쓸거야! – Jyro117
[동시성] (http://en.wikipedia.org/wiki/Synchronicity)이 존재합니다! :-) –
. IF 람다가 너무 투명하면 대칭이어야합니다. –
그러나 스코프는 단순히 대칭이 아닙니다. 'for' 루프 또는'if' 문과 같은 구조조차도 아닙니다. –
lol이므로 lambdas (if-blocks 등)는 명명 범위를 만들지 않지만 평생 범위를 만드시겠습니까? 왜? –