为什么在Kotlin中将变量传递给lambda有效?

问题描述 投票:2回答:1

假设我有高阶函数接受lambda作为参数,如下所示:

fun getNum(op: () -> Int) = op()

还有一个返回数字的函数:

fun getTen() = 10

在main函数中,我可以像这样调用getNum()函数

fun main(args: Array<String>){
    val x = 50
    val a = getNum(::getTen)    // a == 10
    val b = getNum{x}           // this works and b == 50
}

为什么传递变量而不是lambda有效?任何的想法?谢谢。

lambda kotlin
1个回答
3
投票

在Kotlin中,lambda is the return value中的最后一个或单个表达式。

getNum { x }表达式中,{ x }是一个lambda,其中包含单个表达式x,因此被认为是返回值,因此当调用lambda时,它仅评估x中捕获的closure并将其值返回getNum

反过来,getNum(::getTen)调用是callable reference的使用(它可以通过::符号区分),它可以作为函数类型() -> Int的值传递,就像它将是getNum { getTen() }一样。

请参阅:语言参考中的Lambda Expressions and Anonymous Functions

© www.soinside.com 2019 - 2024. All rights reserved.