有一个有趣的方法0:
private fun method0() {
println("method0 fun")
}
还有一个变量 method0:
var method0 = {
println("method0")
}
它们看起来是一样的:
method0()
我发现这两个同时发生,当代码调用时,fun函数具有更高的优先级。除此之外,它们之间是否有任何区别?
有一个有趣的方法0:
private fun method0() {
println("method0 fun")
}
还有一个变量 method0:
var method0 = {
println("method0")
}
它们看起来是一样的:
method0()
我发现这两个同时发生,当代码调用时,fun函数具有更高的优先级。除此之外,它们之间是否有任何区别?
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)
}