报错:以下函数的内部函数return语句报错
Kotlin: 'return' is not allowed here
fun testReturn(summary: (String) -> String): String {var msg = summary("summary收到参数")println("test内部调用参数:=>结果是 :${msg}")val result: (Int) -> String = {if (it > 80) return "优秀的女子"println("不是优秀女子")"${it}不是优秀女子"}println(result(90))return "我是return终点"}fun main(){
testReturn("我是小红")}
原因
-
Lambda 表达式中 return 需要 @ 标签这里特别注意 : 在 Kotlin 中 , 在 lambda 表达式或匿名函数中使用 return 语句时 , 必须使用 return@label 语法来指定你要返回的标签 ; 在 Kotlin 中 , return 语句默认是从最近的封闭函数返回的 , 而在 lambda 表达式中使用 return 时 , 它会尝试从包含它的函数返回 ;
解决:
result函数增加label标签,用于标记返回的位置
val result: (Int) -> String = getreturn@{ // 显式的return必须写上标志符if (it > 80) return@getreturn "优秀的女子"println("不是优秀女子") // 默认return也是返回给内部函数result"${it}不是优秀女子"}