此处有没有一点疑惑,为什么类型推导得出的类型是 () -> Unit ?
此时只要回头看一下Kotlin中函数是如何声明的,就知道为什么了。
为什么这里的函数不是fun开头的
fun main() {
val getString : () -> Unit = {
println(“hello kotlin”)
}
getString()
getString.invoke()
}
- 两种方式都可以成功调用,这里的()其实是invoke操作符的重载。
var getString = {“this is kotlin”} 是什么意思
跑一下上面的代码,看看运行结果是啥
fun main() {
val getString = {
“hello kotlin”
}
print(getString.invoke())
}
fun main() {
val getString = {
“hello kotlin”
666
}
print(getString.invoke())
}
返回值就成了666。 如果最后一行是函数,则就成了函数中的函数,也就是高阶函数。
稍微复杂一点
val testPlus = {number1: Int, number2: Int -> number1 + number2}
public int testPlus(int number1, int number2) {
return number1 + number2;
}
再复杂一点
刚刚提到了,函数分为声明和实现两个部分。那么自然就可以先声明再实现。
先声明:
val getString : (Int) -> String
再实现:
getString = fun(number) = number.toString()
如果把成整体就是下面的样子:
fun main() {
val getString : (Int) -> String = fun(number) = number.toString()
getString
}
tip:上述代码中,把鼠标悬停在getString的调用上,按下Shift+Ctrl+P,就成看到getString的参数和返回值。
@H_502_142@
那么,这么写有什么好处呢?
除了装b,大概是没有其他用处的。
茴字的最后一种写法
声明和实现一起写,应该怎么写呢
val getString : (Int, String) -> String = {values, str -> “value
- values是Int类型,str是String类型,返回值是String类型
还能再简化一点吗
能,但是只能有一个参数
val getString : (String) -> Unit = {
println(“string is $it”)
}
在kotlin中,大部分都是表达式,比如if,when,表达式可以返回,而在java中,if等都是语句,不能返回
那两个甚至多个参数的时候,可以简写吗
能,但是只能有一个参数
val getString : (String) -> Unit = {
println(“string is $it”)
}
在kotlin中,大部分都是表达式,比如if,when,表达式可以返回,而在java中,if等都是语句,不能返回
那两个甚至多个参数的时候,可以简写吗
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。