为什么在Kotlin中将变量传递给lambda起作用?

时间:2018-08-27 22:22:58

标签: lambda kotlin

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

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

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

fun getTen() = 10

在主函数中,我可以像这样调用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起作用?任何想法?谢谢。

1 个答案:

答案 0 :(得分:3)

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

SELECT CAST (T1.ColumnA AS NUMERIC(38, 0)), CAST (T1.ColumnB AS DATE), CAST (T1.ColumnC AS VARCHAR(900)), CAST (T2.ColumnA AS TIME(7)), CAST (T2.ColumnB AS VARCHAR(4)) FROM Table1 T1 LEFT JOIN Table2 T2 ON T1.ID = T2.ID 表达式中,getNum { x }是其中包含单个表达式{ x }的lambda,因此被视为返回值,因此在调用lambda时,它仅求值xclosure中捕获,并将其值返回给x

getNum调用反过来是callable reference的用法(可以通过getNum(::getTen)符号来区分),可以将其作为功能类型的值{ {1}}与::一样。

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