5. with

- 일반 함수로 사용 (인자가 필요함)

- 인자로 받는 객체를 블록의 리시버로 전달

- 블록의 마지막 줄을 반환

 

<예제>

var person : Person = Person("david", "male", "game")

var p : Person = with(person) {
    println("with01")
    printInfo(this);
    hobby = "walk"
    Person("hannah", "female", "swim")
}

println("with02")
printInfo(p)

<결과>

with01    
printInfo :: 
    name -> david
    hobby -> game
    sex -> male
with02
//마지막 줄을 반환하였기 때문에 david가 아닌 hannah가 나옴
printInfo :: 
    name -> hannah
    hobby -> swim
    sex -> female

 

- 세이프 콜을 지원하지 않기 때문에 NPE에 주의하여야 함 (let과 함께 사용하여 문제를 해결할 수 있음)

person?.let {
    with(it) {
        ...
    }
}

그리고 이를 run()함수를 이용하여 사용할 수 있음

person?.run() {
    ...
}

 

+ Recent posts