知识卡片
内联函数打开Lambda的非局部return
内容
Kotlin中Lambda表达式里直接写的return默认会退出包裹它的外层具名函数(非局部return),但这只在该Lambda所在的函数是内联函数时才合法——因为内联函数在编译期把Lambda体直接展开进调用处,return在语法结构上依然处于外层函数体内,跳转才有意义。不需要这种跳转能力的Lambda参数可以用noinline豁免内联;crossinline则要求仍然内联,但禁止其中出现非局部return,常用于Lambda会被嵌套函数间接调用而非直接执行的场景,这与[[内联函数用代码膨胀换调用开销]]是同一个inline机制的两面。
参考来源
《Kotlin开发快速入门与实战》第4章《Kotlin函数》