关于lamda和功能的困惑

时间:2018-07-15 15:32:12

标签: kotlin

所以我只是在和kotlin玩耍而已,对此一无所知。

    fun itsAfunction() = 10
    fun check(function:()->Int):Int{
        return function() + 9
    }

    val result = check(itsAfunction)

为什么我不能在函数检查中传递函数?

如果我做了这样的事情,这将被接受

val result = check({itsAfunction})

问题是function和lambda有什么区别?我总是很坚强,两者都是一样的,但在这种情况下就不一样。

谢谢

2 个答案:

答案 0 :(得分:2)

如果要传递类的函数作为参数,则应使用函数引用(也称为可调用引用/函数文字)。

val result = check(::itsAfunction)

但是以下内容是等效的(afaik):

val result = check { itsAfunction() } //<-- enclosing () is omitted because trailing lambda

如果将check函数设为inline

inline fun check(func: () - > Int) = func() + 9

答案 1 :(得分:1)

Kotlin中的函数已命名或声明,但Lambda是未声明或匿名的函数

命名函数不能作为参数传递给函数。

可以通过创建函数类型的变量并在函数调用中作为参数传递来解决您的上述需求

val itsAfunction: () -> Int = { -> 10 }

fun check(function:()->Int):Int{
    return function() + 9
}

val result = check(itsAfunction)
println("result ${result}")