Kotlin 标签@使用

Kotlin 标签@使用

标签定义

在 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 标签@

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值