Kotlin 标签@使用

时间:2025-02-08 14:19:13

Kotlin 标签@使用

文章目录

  • 标签定义
  • This表达式
  • 标签处返回
  • Return返回最外层函数

标签定义

在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@都是有效的标签(参见语法)。 要为一个表达式加标签,我们只要在其前加标签即可。

This表达式

在Kotlin,有时候需要调用自身的函数或者变量,会用到this表达式

  1. 在类的成员中,this指的是该类的当前对象
  2. 在扩展函数或者带接受者的函数字面值中,this表示在点左侧传递的接收者参数
  3. 如果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 标签@