Kotlin 标签@使用
文章目录
- 标签定义
- This表达式
- 标签处返回
- Return返回最外层函数
标签定义
在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@都是有效的标签(参见语法)。 要为一个表达式加标签,我们只要在其前加标签即可。
This表达式
在Kotlin,有时候需要调用自身的函数或者变量,会用到this表达式
- 在类的成员中,this指的是该类的当前对象
在扩展函数或者带接受者的函数字面值中,this表示在点左侧传递的接收者参数
- 如果this没有限定符,它指的是最内层的包含它的作用域。要引用其他作用域中的this,请使用 标签限定符
标签处返回
Kotlin 有函数字面量、局部函数和对象表达式。因此 Kotlin 的函数可以被嵌套。 标签限制的 return 允许我们从外层函数返回。 最重要的一个用途就是从 lambda 表达式中返回。
fun foo() {
listOf(1, 2, 3, 4, 5).forEach lit@{
if (it == 3) return@lit // 局部返回到该 lambda 表达式的调用者,即 forEach 循环
print(it)
}
print(" done with explicit label")
}
现在,它只会从 lambda 表达式中返回。通常情况下使用隐式标签更方便。 该标签与接受该 lambda 的函数同名。
所谓的隐式标签就是该标签与接收该lambda的函数同名。
fun foo() {
listOf(1, 2, 3, 4, 5).forEach {
if (it == 3) return@forEach // 局部返回到该 lambda 表达式的调用者,即 forEach 循环
print(it)
}
print(" done with implicit label")
}
Return返回最外层函数
fun main(args: Array<String>) {
println("测试函数参数是由fun定义")
fooc()
println("测试函数参数是由Lamdb定义")
fooc1()
}
fun fooc() {
listOf(1, 2, 3).forEach(fun(item: Int) {
if (item == 2) return // 局部返回到匿名函数的调用者,即 forEach 循环
println("当前遍历的值是 $item")
})
println("list集合遍历完成")
}
/**
* 传入作为的参数的函数
*/
fun fooc1() {
listOf<Int>(1, 2, 3).map { item ->
if (item == 2) return
println("当前遍历的值是 $item")
}
println("list集合遍历完成")
}
结果
测试函数参数是由fun定义
当前遍历的值是 1
当前遍历的值是 3
list集合遍历完成
测试函数参数是由Lamdb定义
当前遍历的值是 1
一个不带标签的 return
语句 总是在用 fun
关键字声明的函数中返回。
参考
返回和跳转
Kotlin 标签@