kotlin中的迷惑代码
fun hello() = {
println("sda")
}
fun main() {
hello()
}
猜猜会输出什么?
这个放在编辑器中肯定容易看出来,因为编辑器会进行提示。其实上面的代码什么也不会输出。以上代码放在编辑器中,当我们的鼠标指向hello函数时,会出现以下提示public fun hello(): () → Unit,也就是说hello函数的返回值是一个函数类型:() → Unit,如果想要输出,而需要在main函数中替换为hello.invoke()。这样才会调用hello函数。
Kotlin 会自动推导函数返回值,但是需要注意两点:
- Kotlin 会自动推导函数返回值类型,但显式 return 也必须显式声明返回值类型。
- 使用 = 定义函数可以省略函数返回值类型。上面代码其实kotlin可以进行自动推导返回值类型。
上面代码如果改为以下形式就很好发现。
fun hello(): () -> Unit = {
println("sda")
}
其实我们迷惑的原因还是{}这个,这个在kotlin中使用十分频繁,是lambda表达式。在kotlin中lambda表达式,扩展函数等特性是十分好用的。