Kotlin中lambda的隐式返回

Kotlin中lambda的隐式返回,kotlin,Kotlin,看起来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] } fun main(a

看起来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]
}
fun main(args:Array){
val nums=arrayOf(1,2,3)
val numsPlusOne=nums.map{it->
val r=it+1
R
}
//numsPlusOne=[2,3,4]
}

是的,这是正确的,如果lambda的最后一条语句是表达式,则将其视为返回值

这是(谢谢):

我们可以使用语法从lambda显式返回一个值。否则,隐式返回最后一个表达式的值。因此,以下两个代码段是等效的:

ints.filter {
    val shouldFilter = it > 0 
    shouldFilter
}

最后一条语句语义也适用于、
when
和块,这些语句本身就是表达式:

val foo = if (bar) { 
    doSomething()
    baz 
} else { 
    doSomethingElse()
    qux 
}
另见:

因此,lambda在这方面与语言结构是一致的


如果要在lambda中生成显式的
return
语句,请使用(还有,)。相反,未标记的
return
,与最近的
fun
(忽略lambda)一起工作,因此只能出现在那些被标记的lambda中


为从代码块发出值添加了一个特殊语法,但被拒绝了。

只是一个有用的提示,您可以将其缩短为
val numsPlusOne=nums.map{it+1}
(因为
it
在未指定时是隐含的,如果
it+1
是最后一行,其结果将作为@hotkey explained返回)“如果lambda的最后一个语句是表达式”-我找不到定义的确切来源,但我认为将“表达式”称为“语句”是不正确的。Kotlin文档只说“隐式返回最后一个表达式的值”“。我的理解是,语句通常不产生值,
表达式
不是
语句
@mowwalker的一种类型,虽然这是有争议的,但在某种情况下,一种语句是表达式,这可能是一个悬而未决的未使用值,也可能是一个返回值被忽略的函数调用
val foo = if (bar) { 
    doSomething()
    baz 
} else { 
    doSomethingElse()
    qux 
}