Kotlin内联函数只有一个return语句
我想在函数外部使用内联函数return(跳过打印“after”)。所以当我使用Kotlin内联函数只有一个return语句,kotlin,inline,Kotlin,Inline,我想在函数外部使用内联函数return(跳过打印“after”)。所以当我使用 inline fun test() { return } fun test1() { println("before") test() println("after") } test1() 输出是 before after before 当我使用 inline fun test(callBack: () -> Unit) {
inline fun test() {
return
}
fun test1() {
println("before")
test()
println("after")
}
test1()
输出是
before
after
before
当我使用
inline fun test(callBack: () -> Unit) {
callBack()
}
fun test1() {
println("before")
test {
return
}
println("after")
}
test1()
输出是
before
after
before
所以我想知道为什么第一个内联函数中的return语句不起作用。为什么第一段代码不起作用?根据文档:
(return)默认情况下,从最近的封闭函数或匿名函数返回。-
不带标签的return语句总是从用fun关键字声明的函数返回。-
事实上,我会回复这个问题:为什么它在第二个例子中有效?答案是:
在Kotlin中,我们只能使用普通的、非限定的返回来退出命名函数或匿名函数。这意味着要退出lambda,我们必须使用一个标签,并且lambda内部禁止裸返回,因为lambda不能使封闭函数返回(…)。但是如果lambda传递给的函数是内联的,那么返回也可以是内联的,因此是允许的。
--
您可以使用kotlin交叉内联 Crossinline允许您标记lambda,以禁止它使用非本地返回。如果您还记得,内联lambda将return解释为非本地返回,并且在非内联lambda上不允许return
fun main(args: Array<String>) {
test1()
}
inline fun test(crossinline callBack: () -> Unit) {
callBack()
}
fun test1() {
println("before")
test {
return@test
}
println("after")
}
fun main(args:Array){
test1()
}
内联乐趣测试(交叉内联回调:()->单元){
回调函数()
}
趣味测试1(){
println(“之前”)
试验{
return@test
}
println(“之后”)
}
然后输出将是has expectes,因为内联函数中的返回是从该函数返回的,而不是从其内联的函数返回的。