看起来lambda的最后一行总是返回该值,即使你省略了该return语句.它是否正确?是否记录在任何地方?
fun main(args: Array<String>) {
val nums = arrayOf(1, 2, 3)
val numsPlusOne = nums.map { it ->
val r = it + 1
r
}
// numsPlusOne = [2, 3, 4]
}
Run Code Online (Sandbox Code Playgroud)
hot*_*key 37
是的,这是正确的,如果lambda的最后一个语句是一个表达式,它被认为是它的返回值.
这是参考文献所说的内容(感谢@KirillRakhman):
我们可以使用限定的返回语法显式地从lambda返回一个值.否则,将隐式返回最后一个表达式的值.因此,以下两个片段是等效的:
Run Code Online (Sandbox Code Playgroud)ints.filter { val shouldFilter = it > 0 shouldFilter }
Run Code Online (Sandbox Code Playgroud)ints.filter { val shouldFilter = it > 0 return@filter shouldFilter }
最后一条语句语义也是如此if(这就是为什么没有三元运算符),when以及try-catch块,这些语句是表达式本身:
val foo = if (bar) {
doSomething()
baz
} else {
doSomethingElse()
qux
}
Run Code Online (Sandbox Code Playgroud)
因此,lambda与这方面的语言结构是一致的.
如果要return在lambda中创建显式语句,请使用return@label语法(另外,使用示例的另一个答案).return相反,未标记的是与最近的fun(忽略的lambdas)一起工作,因此只能出现在内联的 lambda中.
有一种语言提议要添加用于从代码块中发出值的特殊语法,但它被拒绝了.
| 归档时间: |
|
| 查看次数: |
7697 次 |
| 最近记录: |