kotlin 中 return@key 用法

在 Kotlin 中,return@find 是一种**标签返回(labeled return)**的用法。这里的 find 是一个函数名(通常是高阶函数,比如 find {} lambda 表达式),而 return@find 的意思是:find 函数的 lambda 中直接返回结果


简单解释:

假设你有如下代码结构:

kotlin 复制代码
val item = items.find { 
    // ...一些逻辑...
    if (someCondition) {
        return@find true  // 相当于在 find 的 lambda 中返回 true
    }
    // ...
}

这里 return@find 的作用是结束 find 函数中的 lambda 表达式,并返回指定值 (这里是 true)。它不是从整个函数中返回,而是从 find {} 这个 lambda 返回。


举个例子:

kotlin 复制代码
fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)

    val result = numbers.find {
        if (it == 3) {
            return@find true  // 当 it == 3 时,在 find 的 lambda 中返回 true
        }
        false
    }

    println(result) // 输出:true
}

return@find falsereturn false 区别:

  1. return@find false

    • 这是带标签的返回(labeled return)
    • 它会从名为 find 的作用域中返回值 false
    • 通常用于 lambda 表达式或高阶函数中,明确指定从哪个函数或作用域返回
  2. return false

    • 这是从当前函数直接返回值 false
    • 如果在 lambda 或嵌套函数中使用,它会尝试从最外层的函数返回

让我通过一个简单的例子说明区别:

kotlin 复制代码
fun example() {
    val list = listOf(1, 2, 3, 4, 5)
    
    // 使用带标签的返回
    val result1 = list.find { 
        if (it == 3) {
            return@find false  // 只是影响 find 操作,返回 false 作为当前元素的匹配结果
        }
        it % 2 == 0
    }
    
    // 不使用标签的返回
    val result2 = list.find { 
        if (it == 3) {
            return false  // 这会直接结束整个 example() 函数并返回 false
        }
        it % 2 == 0
    }
}

在你提到的代码中,return@find false 是正确的用法,因为它明确表示从 find 高阶函数中返回 false,而不是从包含它的整个函数中返回。

这种语法允许你在 lambda 表达式内部精确控制返回行为,避免意外地从外层函数返回。


总结:

  • return@find 是 Kotlin 特有的语法;
  • 它表示"从名为 find 的 lambda 表达式中返回";
  • 避免与外层函数混淆,是一种显式的局部返回方式;
  • 如果你在其他地方看到类似写法如 return@forEachreturn@map,也是同样的道理。
相关推荐
jinanwuhuaguo3 小时前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
我命由我123453 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
小书房8 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
jinanwuhuaguo8 小时前
(第二十八篇)OpenClaw成本与感知的奇点——从“Token封建制”到“全民养虾”的本体论地基
android·人工智能·kotlin·拓扑学·openclaw
jinanwuhuaguo1 天前
OpenClaw联邦之心——从孤岛记忆到硅基集体潜意识的拓扑学革命(第二十三篇)
android·人工智能·kotlin·拓扑学·openclaw
pengyu1 天前
【Kotlin 协程修仙录 · 筑基境 · 后阶】 | 调度器的艺术:Dispatchers 四大护法与 withContext 性能密码
android·kotlin
千码君20161 天前
flutter: 分享一下基于trae cn 构建的过程
java·vscode·flutter·kotlin·trae
小书房2 天前
Kotlin的内联函数
java·开发语言·kotlin·inline·内联函数
zhangphil3 天前
Android Page3与Flow分页查媒体数据库展示宫格图片列表,Kotlin
android·kotlin
胡致和3 天前
配置变更后,弹窗为什么飞到了最左边?
kotlin