kotlin方法声明大括号前面有等号=和没有等号的区别?比如说下面这两个方法声明。
fun test1() {
println("hello")
}
和
fun test2() = {
println("hello")
}
test1方法执行完成之后会输出hello
,但是test2执行之后没有输出。
在kotlin中,不带=
号的方法申明方式很常见,就是定义一个普通的方法,它等效于下面这个方法申明,但是因为返回类型和返回值是Unit,所以可以省略。
fun test1(): Unit {
println("hello")
return Unit
}
但是带=
号的方法申明分两种情况,第一种情况是=
号后面是单个表达式,比如下面这两个方法。
fun test() = println("hello")
fun test(x: Int): Int = x * x
它们还是普通方法,只不过因为后面只有一个表达式,所以可以省略大括号,它们分别等效于下面两个方法。
fun test() {
println("hello")
}
fun test(x: Int): Int {
return x * x
}
第二种情况是=
号后面是一个lambda表达式,这样申明的是高阶函数,也就是函数的返回值也是一个函数,提问中的test2方法就是一个高阶函数,它等效于下面这种申明。
fun test2(): () -> Unit {
val ret: () -> Unit = { println("hello") }
return ret
}
所以直接调用test2()
,是不会输出hello
,它仅仅是返回了一个函数,但是并没有执行返回的这个函数,如果想要输出hello
,可以这样调用。
test2()()
//or
val f = test2()
f()
//or
f.invoke()
内容