首页 > 解决方案 > Kotlin 内联函数只有一个 return 语句

问题描述

我想使用内联函数返回函数外(跳过打印“之后”)。所以当我使用

inline fun test() {
    return
}

fun test1() {
    println("before")
    test()
    println("after")
}
test1()

输出是

before  
after

当我使用

inline fun test(callBack: () -> Unit) {
    callBack()
}

fun test1() {
    println("before")
    test {
        return
    }
    println("after")
}
test1()

输出是

before

所以我想知道为什么第一个内联函数中的 return 语句不起作用。为什么第一段代码不起作用?

标签: kotlininline

解决方案


根据文档:

(return) 默认情况下从最近的封闭函数或匿名函数返回。--返回和跳跃

没有标签的 return 语句总是从用 fun 关键字声明的函数返回。--匿名函数

实际上我会回答这个问题:为什么它在第二个例子中起作用?答案是:

在 Kotlin 中,我们只能使用正常的、不合格的 return 来退出命名函数或匿名函数。这意味着要退出 lambda,我们必须使用标签,并且 lambda 内部禁止裸返回,因为 lambda 不能使封闭函数返回 (...)。但是如果传递 lambda 的函数是内联的,那么返回也可以内联,所以是允许的。--非本地退货


推荐阅读