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

3

有一个有趣的方法0:

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

还有一个变量 method0:

    var method0 = {
        println("method0")
    }

它们看起来是一样的:

    method0()

我发现这两个同时发生,当代码调用时,fun函数具有更高的优先级。除此之外,它们之间是否有任何区别?


你错误称之为“变量函数”的东西被称作 Lambda(拉姆达)表达式。你应该阅读 https://kotlinlang.org/docs/lambdas.html,特别是标题为“Lambda 表达式语法”的部分,但请注意最终需要阅读整个页面。 - lukas.j
好的,它是一个具有函数类型的变量和使用lambda语法声明的函数。整个东西不是lambda。 - Tenfour04
1个回答

2
< p >使用 var 方法得到的是一个函数对象。Lambda内容被包装成一个函数对象,因此它可以像类的任何其他实例一样传递。例如,它可以直接用作函数参数。

var method0 = {
    println("method0")
}

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

fun main() {
    doSomethingTwice(method0)
}

由于它被标记为var,因此您可以将其替换为不同的函数:

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

需要注意的是,这种指定函数的方式略微繁琐,因为它将函数包装在另一个类实例中。

您仍然可以使用::将任何“常规”函数随时包装成功能对象,以避免在不必要的时候进行包装。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接