报错:以下函数的内部函数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}不是优秀女子" }