赞
踩
报错:以下函数的内部函数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}不是优秀女子"
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。