This 식

현재 리시버를 나타내기 위해 this 표현식을 사용한다.

this 제한자가 없으면 가장 안쪽에 있는 scope를 가리킨다. 다른 scope에서 this를 참조하려면 레이블 제한자를 사용한다.

제한된 this

바깥쪽 scope (클래스 또는 확장 함수 또는 레이블이 있는 리시버를 사용하는 함수 리터럴)에서 this 에 접근하려면 this@label 을 쓰고, @label 은 this 로 접근하려는 scope 에 대한 레이블이다.

class A { // implicit label @A
    inner class B { // implicit label @B
        fun Int.foo() { // implicit label @foo
            val a = this@A // A의 this
            val b = this@B // B의 this

            val c = this // foo()의 receiver인 Int
            val c1 = this@foo // foo()의 receiver인 Int

            val funLit = lambda@ fun String.() {
                val d = this // funLit의 receiver
            }


            val funLit2 = { s: String ->
                // 둘러싼 람다 식이 리시버를 갖지않으므로
                // foo() receiver
                val d1 = this
            }
        }
    }
}

results matching ""

    No results matching ""