以函数作为参数或返回函数的函数被称为高阶函数
fun numTest(num: Int, bool: (Int) -> Boolean): Int {
return if (bool(num)) num else 0
}
//invoking
println(numTest(5) { it > 5 })//print 0
println(numTest(8) { it > 5 })//println 8
fun numCompare(num1: Int, num2: Int, compare: (a: Int, b: Int) -> Boolean): Int {
return if (compare(num1, num2)) num1 else num2
}
fun biggerNum(a: Int, b: Int) = a > b
fun smallNum(a: Int, b: Int) = a < b
//invoking
println(numCompare(5, 8, ::biggerNum))//print 8
println(numCompare(1, 2, ::smallNum))//print 1
println(numCompare(10, 12) { a, b ->
a == b
})//print 12
Android开发中RecyclerView的Item点击事件
private var listener: ((Int, String) -> Unit)? = null
fun setOnClickListener(l: (position: Int, content: String) -> Unit) {
listener = l
}
//invoking
setOnClickListener { position, content ->
println("$position $content")
}
listener?.invoke(5, "China")//print 5 China
fun <T> lock(lock: Lock, body: () -> T): T {
lock.lock()
try {
return body()
} finally {
lock.unlock()
}
}