Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。InfoQ
高阶函数就是可以接受函数作为参数并返回一个函数的函数。Kotlin-in-Chinese
Kotlin 支持函数作为参数传递,无需构建对象来包装函数。
无参数函数调用
class Hello {
fun say() {
Timber.i("Hello World")
}
/**
* 在 Kotlin 中无返回为 Unit
*
* 此方法接收一个无参数的函数并且无返回
*
* 使用参数名加 () 来调用
*/
fun people(hello: () -> Unit) {
hello()
}
/**
* 在 kotlin 中有一个约定,如果最后一个参数是函数,可以省略括号
*/
fun main() {
people ({ say() })
people { say() }
}
}
** 调用函数需使用参数名加 ()
**
有参数函数调用
class Hello {
fun say(msg: String) {
Timber.i("Hello $msg")
}
/**
* 当调用的函数有形参时,
* 需要在调用的函数声明,并使用声明的形参;
* 函数参数中的形参无法使用
*/
fun people(arg0: String, hello: (arg1: String) -> Unit) {
hello(arg0)
// hello(arg1) 这样调用将报错
}
fun main() {
people("Android") { say("World") }
}
}
传入给 arg0
的值貌似未生效 ** ??? **
- @param arg0 实参
- @param arg1 形参
在people
函数中,arg0
是实参,而arg1
是形参,所以不能直接使用;
有点绕 😂 ,可以看下这篇博文 Kotlin 双冒号 :: 使用。