[Kotlin] apply 메소드 내에서 멤버 메소드를 호출할때 질문좀 드려요

조회수 333회
fun main() {
        data class Person(var name: String, var skills : String) {
                fun test(): Int {
                        return 5
                }
        }
        var person = Person("Kildong", "Kotlin")

        // 여기서 this는 person 객체를 가리킴
        person.apply { 
                test() 
        }
}

코틀린 공부하다가 apply 함수에 대해서 궁금한것이 생겼는데요,

apply 함수가 정의되어있는 파일 내부를 까보니

public inline fun <T> T.apply(block: T.() -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block()
    return this
}

이런식으로 정의가 되어있습니다

두가지 정도 질문이 있는데

  1. 여기서 block: T.() -> Unit 은 람다식을 말하는 것 같은데 보니까 일반 멤버 변수(프로퍼티)도 호출이 되더라구요? 어떻게 이게 가능한지요?

  2. 람다식이라고 했을때 block: T.() -> Unit라는 람다식은 Unit을 반환하는 타입이라고 되어있는데 저는 지금 Int를 반환하고 있잖아요..? 이것두 어떻게 가능한 것인지..

제가 어딘가 잘못이해하고 있는 것 같긴한데 알려주시면 감사하겠습니다

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)