kotlin的高阶函数是指将函数作为参数或返回值的函数
将函数作为参数的高阶函数
看一下sumBy{}源码:1
2
3
4
5
6
7public inline fun CharSequence.sumBy(selector: (Char) -> Int): Int {
var sum: Int = 0
for (element in this) {
sum += selector(element)
}
return sum
}sumBy的使用案例:
1
2
3val testStr = "abc"
val sum = testStr.sumBy { it.toInt() }
println(sum)执行结果为:294
备注一下:kotlin官方给出的建议:当高阶函数的参数只有一个函数且这个函数为lambda表达式时,调用高阶函数可以省去(),所以直接函数名后跟上lambda表达式{ it.toInt() },还有一个约定,即当函数的最后一个参数是一个lambda表达式,则可以在圆括号之外定义它。函数作为返回值的高阶函数
这里可以用闭包的例子来说明1
2
3
4
5
6
7
8
9
10
11
12fun test(b : Int): () -> Int{
var a = 3
return fun() : Int{
a++
return a + b
}
}
val t = test(3)
println(t())
println(t())
println(t())输出结果为:
1
2
37
8
9