슬롯사이트 brunch

브런치북 19 21

You can make anything
by writing

C.S.Lewis

17

빠르게 살펴보기

18


코틀린은 지정된 슬롯사이트 객체로 함수 리터럴을 호출 할 수 있도록 합니다. 함수 리터럴의 body내에서, 어떤 추가적인 한정자 없이 해당 슬롯사이트 객체 메서드를 호출할 수 있습니다. 마치 함수의 body 내부에 있는 슬롯사이트 객체의 멤버에 접근 가능한 확장 함수처럼요.


그러한 함수 리터럴의 타입은 다음과 같이슬롯사이트를 가지는 함수 타입입니다.


20Int.(other: Int) - Int



와닿지 않으니 예제를 한 번 실행해보겠습니다.


fun main(args: Array<String) {

val sum1 :Int.(num: Int) - Int = {this+it}

val sum2 :Int.(Int) - Int = {this+it}

println(1.sum1(2))

println(1.sum2(2))

}


3
3



람다식은 연습겸 조금 다르게 하나 더 표기해봤습니다.


익명 함수 문법은 직접적으로 함수 리터럴의슬롯사이트 타입을 지정할 수 있도록 합니다. 이것은 만약에 슬롯사이트를 가지는 함수 타입의 변수를 선언하고 추후에 그 변수를 사용할 때 유용합니다.


fun main(args: Array<String) {

val sum = funInt.(num: Int): Int = this + num

println(1.sum(2))

}


3



람다 표현식은 슬롯사이트 타입이 문맥상 유추될 수 있을 때 슬롯사이트를 가진 함수 리터럴로 사용될 수 있습니다.


class 슬롯사이트 {

fun body() { ... }

}


fun 슬롯사이트(init: 슬롯사이트.() - Unit): 슬롯사이트 {

val 슬롯사이트 = 슬롯사이트() // create the receiver object

슬롯사이트.init() // pass the receiver object to the lambda

return 슬롯사이트

}



슬롯사이트 { // lambda with receiver begins here

body() // calling a method on the 슬롯사이트 object

}



잘 이해가 안되네요.

슬롯사이트


다음과 같이 보면 좀 도움이 될 것 같습니다.


fun main(args: Array<String) {

val test : (슬롯사이트.() - Unit) = {

println("test")

}

슬롯사이트(test)

}


class 슬롯사이트 {

fun body() {

println("슬롯사이트")

}

}


fun 슬롯사이트(aaa:슬롯사이트.() - Unit): 슬롯사이트 {

val 슬롯사이트 = 슬롯사이트() // receiver 객체 생성

슬롯사이트.aaa() // 슬롯사이트 객체를 람다로 전달

return 슬롯사이트

}



//슬롯사이트 { // receiver가 있는 람다의 시작점

//body()// 슬롯사이트 객체의 메소드를 호출

//}


test


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari