我正在努力理解Kotlin中的一个概念。查看this
val lambda = { greeting: String, name: String ->
if(greeting.length < 3) return // error: return not allowed here
println("$greeting $name")
}
这将导致错误。请将lambda表达式重写为此
val lambda = greet@ { greeting: String, name: String ->
if(greeting.length < 3) return@greet
println("$greeting $name")
}
这是可行的,因为“......从lambda返回到外部调用函数......”
我很难理解的是,* 外部调用函数 * 是什么。没有其他函数调用lambda
。这里到底发生了什么?
1条答案
按热度按时间kr98yfug1#
你是对的,现在没有其他函数调用
lambda
*。这意味着,当你决定调用lambda
时,它将返回到你正在调用的函数。例如,如果您有:
然后
return@greet
将返回到someFunction
。someFunction
是“外部调用函数”。只是说这可能没有什么意义,除非你把它和没有标签的
return
进行比较。让我们假设一个return
和return@label
都允许的情况:这里,
return@foo
返回到lambda的“外部调用函数”,即aMoreMeaningfulExample
。这意味着当it
为3时,println(it)
将被跳过。返回到aMoreMeaningfulExample
后,for
循环仍将正常继续,因此您将看到剩余的数字,并打印“Done!”。另一方面,如果你使用
return
,它会返回到任何称为main
的地方,换句话说,终止程序。你只会看到“1”和“2”被打印出来。