高阶函数是一个将另一个函数作为参数或返回一个函数的函数
object FunctionTest {
@JvmStatic
fun main(args: Array<String>) {
var sumReult = calculate(4,5,::sum)
println("value = $sumReult")
//最后一个参数为lambda表达式,可以放到参数外
// sumReult = calculate(6,7, { a, b -> a * b })
sumReult = calculate(6,7) { a, b -> a * b }
println("value = $sumReult")
val func = calculate2()
sumReult = func(8,9)
println("value = $sumReult")
println("value = ${func(8,9)}")
}
//参数是函数
private fun calculate(x: Int, y: Int, operation: (Int, Int) -> Int): Int {
return operation(x, y)
}
//返回值是函数
private fun calculate2(): (Int, Int) -> Int {
return ::sum
}
private fun sum(x: Int, y: Int):Int {
return x * y
}
}
Lambda Functions
val upperCase1: (String) -> String = { str: String -> str.uppercase() } // 1
val upperCase2: (String) -> String = { str -> str.uppercase() } // 2
val upperCase3 = { str: String -> str.uppercase() } // 3
// val upperCase4 = { str -> str.uppercase() } //参数必须明确类型 // 4
val upperCase5: (String) -> String = { it.uppercase() } // 5
// 只有一个参数可用it代替
val upperCase6: (String) -> String = String::uppercase // 6
println(upperCase1("hello"))
println(upperCase2("hello"))
println(upperCase3("hello"))
println(upperCase5("hello"))
println(upperCase6("hello"))