2017-12-04 20 views
5

나는 Kotlin의 초보자입니다. 나는 @ 접두어 또는 @ 접미사가있는 Kotlin의 레이블 this의 차이에 대해 궁금합니다.Kotlin에서`this '가있는 수신기를 표시 할 때`@'라벨의 위치

[email protected]과 똑같이 작동하는 것으로 보이는 코드를 [email protected]에 작성했습니다.

이 두 가지는 정확히 동일한 것입니까? 그렇지 않은 경우 두 가지의 차이점은 무엇입니까?

나는 *@this 양식에 대한 연구를 시도했지만 그것에 대한 참조를 찾을 수 없었습니다. 내가 찾을 수있는 것은 this official doc이며 [email protected]*임을 보여줍니다. 아무도 내가 가야 할 올바른 참조로 나를 공유 할 수 있다면 좋을 것이다.

+0

이 그것이 정말 어이 – Moira

+0

1blustone @, 유효한 것, 덕분 대답. 몇 가지 테스트를 거친 후에, 나는 당신이 말하는 것이 실제로 맞다고 확신합니다. 하지만 정교화 할만한 참고 자료 나 사양을 알려 주실 수 있습니까? '@'의 사용법을 보여주는 https://kotlinlang.org/docs/reference/keyword-reference.html#operators-and-special-symbols를 볼 때, 나는'@'이 할 수있는 어떤 증거도 찾을 수 없기 때문에 'SignInActivity @ this'와 같이 후위 문자로 사용됩니다. – viz

답변

5

[email protected] thisthis에 대한 (실제 클래스 이름과는 아무 상관이 없습니다) SignInActivity라는 불필요한 라벨을 정의하는 기능을, this에 대한 또 다른 표현이다. Kotlin grammar documentation 따르면

:

labelReference (used by atomicExpression, jump) 
    : "@" ++ LabelName 
    ; 
labelDefinition (used by prefixUnaryOperation, annotatedLambda) 
    : LabelName ++ "@" 
    ; 

[email protected]은 (Returns and Jumps 용) 이름 "안녕하세요"와 단지 라벨 @hello 반면

인 표지 루프 또는 블록에 대한 참조이다. 결합

이 표현은 아래와 같이 사용할 수 있습니다

[email protected] for (i in 1..100) { 
    for (j in 1..100) { 
     if (...) [email protected] //jump to [email protected] 
    } 
} 
+0

위대한 답변! 고마워. 그래서 미신 일뿐입니다. 롤. – viz

1

SignInActivity @ this는 SignInActivity.Yis (Java) 을 의미합니다. @ SignInActivity는 - SignInActivity 컨텍스트 대신 로컬 컨텍스트 (일반적으로 클로저에 있음)를 사용한다는 것을 의미합니다.

+1

을 수행 흥미롭게 – viz

+0

당신이 제공 한 링크는 실제로'@'가 [외부 범위에서 'this'표현식을 참조 할 수 있음] (https://kotlinlang.org/docs/reference/this-expressions.html#qualified)을 나열합니다. – zsmb13

+0

@ zsmb13 그렇습니다. 그러나 'label @ this'가 아닌'this @ label'의 형태로 나타납니다. – viz