[kotlin] lambda vs anonymous function

나호영·2023년 3월 25일

람다표현식은 non-local return이다. 애초에 람다식이 파라미터로 전달될 때, 해당 람다식에 return을 사용할 수 없다. 하지만 called function이 inline으로 선언되어 있다면 가능하다. 근데 이 때 return을 하게 되면 inline 함수 특성상 해당 함수를 호출하는 것이 아니라 그대로 바이트 코드를 복사해와서 call한 자리에 붙여넣기 때문에 calling function이 return되는 문제가 있다. 이를 해결하기 위해 label@을 붙이거나 return@calledfunction 을 선언해야한다.
반대로 anonymous function은 local return이다. 익명함수에서 리턴하면 anonymous function이 return된다.

fun main(args : Array<String>){
    called(fun (): Unit {
        println("this if anonymous function")
        return
    }
    )
    called() lambda@{
        println("this is lambda expresssion")
        return@lambda
    }
    println("main function return")
}

inline fun called(func : () -> Unit){
    println("this function is called")
    func()
    println("this function return")
}
결과
this function is called
this if anonymous function
this function return
this function is called
this is lambda expresssion
this function return
main function return
profile
공부 내용 기록

0개의 댓글