kotlin变量函数和普通fun函数有什么区别?

What are the differences between kotlin variable functions and common fun functions?

有个好玩的方法0:

    private fun method0() {
        println("method0 fun")
    }

还有一个 var method0 :

    var method0 = {
        println("method0")
    }

好像用的一样:

    method0()

我发现两者同时发生,代码调用时fun函数的优先级更高。 除此之外还有什么区别吗?

var 这样做的方式会产生一个功能对象。 lambda 内容被包装为一个函数对象,因此它可以像 class 的任何其他实例一样传递。可以直接作为函数参数,例如

var method0 = {
    println("method0")
}

fun doSomethingTwice(action: ()->Unit) {
    repeat(2) { action() }
}

fun main() {
    doSomethingTwice(method0)
}

并且由于它被标记为 var,您可以将其换成其他功能:

fun main() {
    method0 = { println("hello, world!") }
    doSomethingTwice(method0)
}

请注意,这种指定函数的方式有点重,因为它将函数包装在另一个 class 实例中。

并且您仍然可以随时使用 :: 将任何“常规”函数包装到函数对象中,以避免在必要时才这样做。

fun method0() {
    println("method0")
}

fun main() {
    doSomethingTwice(::method0)
}