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)
}
有个好玩的方法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)
}