return 키워드가 사용될 수 있다.crossline 지시어는 함수라 람다 표현에서 비-지역적인 리턴을 허용하지 않아야할 때 사용한다.
return 키워드를 사용하여 종료할 수 없다.
crossline로 지시되어 있으면, 컴파일러는 람다 자신만 return 할 수 있도록 제한하여, 람다를 감싸는 함수나 메서드에는 영향을 미치지 않도록 한다.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
inline fun higherOrderFunction(crossinline lambda: () -> Unit) {
val runnable = Runnable {
lambda() // Invoking the lambda
}
// ...
runnable.run() // Running the runnable
// ...
}
fun main() {
higherOrderFunction {
// Some code
// return // Error: Return is not allowed here
}
}
higherOrderFunction 은 람다 파라미터를 받는 인라인 함수crossinline 으로 지시하여 람다가 지역적인 리턴만 할 수 있도록 보장하고 있다.