有一个简单的Kotlin代码示例,其中包含lambda函数,但它不是这样工作的

zfycwa2u  于 2022-11-30  发布在  Kotlin
关注(0)|答案(1)|浏览(133)

它不返回int "10",而是返回一个奇怪的字符串,如"Function1〈java. lang. Integer,java. lang. Integer〉"
源代码:
`

fun main(args: Array<String>) {

    println(Bird.a { 10 })
}

class Bird() {

    companion object {

        fun a(b: @JvmSuppressWildcards () -> Int): (Int) -> Int {
            return { b() }
        }
    }
}

`
我得到的输出是函数1〈java. lang. Integer,java. lang. Integer〉

rsaldnfx

rsaldnfx1#

它不是返回Int,而是返回一个接受Int的lambda:(Int)-〉Int。如果希望函数返回Int,请将返回类型从:(Int) -> Int至:Int,您需要将return { b() }更改为return b()
所以最终的函数将是这样的:

class Bird() {

    companion object {

        fun a(b: @JvmSuppressWildcards () -> Int): Int {
            return b()
        }
    }
}

如果你还想得到一个lambda并且需要从它那里得到Int,你需要像调用其他函数一样调用它,这里你打印的是lambda本身:

fun main(args: Array<String>) {

    println(Bird.a { 10 })
}

但需要调用它并为它传递Int,以便打印结果,如下所示:

fun main(args: Array<String>) {

    println(Bird.a { 10 }(10))
}

您需要传递一个Int,否则它将无法工作,但您没有在代码中使用该Int,因此您可以通过将返回类型从(Int) -> Int更改为() -> Int来删除它。
或者您可以这样使用它:

class Bird() {

    companion object {

        fun a(b: @JvmSuppressWildcards () -> Int): (Int) -> Int {
            return { b() * it } // it is the Int passed to the returned lambda
        }
    }
}

相关问题