kotlin lambda与函数混淆

v2g6jxz6  于 2022-12-30  发布在  Kotlin
关注(0)|答案(2)|浏览(172)

所以我只是在和Kotlin玩,不能让我的头周围关于这一点。

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

    val result = check(itsAfunction)

为什么我不能在函数检查中传递函数?
如果我做了这样的事,这将被接受

val result = check({itsAfunction})

问题是函数和lambda之间的区别是什么?我总是坚韧两者是相同的,但在这种情况下不是。
谢谢

t3psigkw

t3psigkw1#

如果你想把一个类的函数作为参数传递,你应该使用函数引用(也叫可调用引用/函数文本)。

val result = check(::itsAfunction)

但是下面的代码是等价的(afaik):

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

如果将check函数设置为inline

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

9njqaruj2#

Kotlin中的函数已命名或声明,但Lambda是未声明或匿名函数
命名函数不能作为参数传递给函数。
通过创建一个函数类型的变量并在函数调用中作为参数传递,可以解决上述问题

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

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

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

相关问题