Kotlin中返回类型为Unit的Lambda如何实现提前返回?
问题原因
Kotlin中无标签的return默认只能从使用fun关键字声明的函数(包括普通函数、扩展函数、匿名函数)中返回。你当前使用的是普通Lambda表达式,不属于fun声明的函数范畴,编译器无法确定return的目标作用域,因此触发编译错误。
解决方法
- 方法1:使用带标签的return
你可以直接使用Lambda的隐式标签(和存储Lambda的变量同名)完成提前返回,不需要额外自定义标签:
var f: () -> Unit f = { if (false) { return@f // 隐式标签,直接退出当前Lambda } "whatever" }
如果需要更清晰的语义,也可以自定义标签:
var f: () -> Unit f = customLabel@{ if (false) { return@customLabel } "whatever" }
- 方法2:用匿名函数替换Lambda
匿名函数是用fun关键字声明的,无标签的return会默认从当前匿名函数本身返回,符合你的使用需求:
var f: () -> Unit f = fun() { if (false) { return // 合法,直接退出当前匿名函数 } "whatever" }
补充说明
如果该Lambda是作为内联函数的参数传入,无标签的return是合法的,此时返回的目标是内联函数的外层调用函数。只有非内联场景的独立函数类型Lambda,才会出现你遇到的报错问题。
内容的提问来源于stack exchange,提问作者Herman
相关产品推荐
相关产品推荐

