2017-12-04 14 views
5

Tôi là người mới ở Kotlin. Tôi tò mò về sự khác biệt của nhãn this trong Kotlin với tiền tố @ hoặc postfix @.Vị trí của nhãn `@` trong Kotlin khi biểu thị bộ thu với 'this`

Tôi vừa thấy mã viết [email protected], có vẻ như hoạt động chính xác giống như [email protected].

Hai thứ này có giống nhau không? Nếu không, sự khác biệt giữa hai là gì?

Tôi đã cố gắng thực hiện một số nghiên cứu trên biểu mẫu *@this, nhưng tôi không thể tìm thấy bất kỳ tham chiếu nào về nó. Tất cả những gì tôi có thể tìm thấy là this official doc thể hiện số [email protected]*. Sẽ rất tuyệt nếu ai cũng có thể chia sẻ với tôi tài liệu tham khảo chính xác mà tôi nên đến.

+0

Điều này có vẻ hợp lệ, thú vị – Moira

+0

@ 1blustone nó thực sự – viz

Trả lời

5

[email protected] this chỉ là một biểu hiện cho this, với các chức năng xác định một nhãn không cần thiết gọi SignInActivity (trong đó có liên quan gì đến tên lớp thực tế) cho this.

Theo Kotlin grammar documentation:

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

[email protected] chỉ là một nhãn với tên "hello" (ví Returns and Jumps),

trong khi @hello là một tài liệu tham khảo cho vòng lặp dán nhãn hoặc chặn.

Các biểu thức này kết hợp có thể được sử dụng như sau:

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

Câu trả lời hay! Cảm ơn rất nhiều. Vì vậy, nó chỉ là một mê tín dị đoan. lol. – viz

1

SignInActivity @ this có nghĩa là SignInActivity.this (Java) @ SignInActivity này có nghĩa là - sử dụng ngữ cảnh SignInActivity thay vì ngữ cảnh cục bộ (thường là trong bao đóng).

+1

Hey, cảm ơn cho câu trả lời. Sau một số thử nghiệm, tôi tin rằng những gì bạn đang nói là thực sự chính xác. Nhưng bạn có thể cung cấp cho tôi một số tham chiếu hoặc spec để xây dựng? Bởi vì khi tôi thấy https://kotlinlang.org/docs/reference/keyword-reference.html#operators-and-special-symbols thể hiện cách sử dụng '@', tôi không tìm thấy bằng chứng nào cho thấy '@' có thể được sử dụng như một postfix như trong 'SignInActivity @ this'. – viz

+0

Liên kết bạn cung cấp thực sự liệt kê rằng '@' có thể [tham chiếu đến biểu thức 'này' từ một phạm vi bên ngoài] (https://kotlinlang.org/docs/reference/this-expressions.html#qualified). – zsmb13

+0

@ zsmb13 Có, nhưng lưu ý rằng nó ở dạng «nhãn @ này', không phải' nhãn @ này' – viz

Các vấn đề liên quan