Higher-order functions are functions that take functions as arguments and return a function.
There are three ways to pass function type parameter values for higher-order functions:
1. Define the function directly, and pass it, you need to add :: before the function name
1. Use Lambda expressions
1. Use anonymous functions
// 高阶函数(higher-order function)
interface Product
{
var area:String
fun sell(name:String)
}
class MobilePhone:Product
{
override var area: String = ""
override fun sell(name: String) {
println("销售${name}")
}
override fun toString(): String {
return area
}
}
// 高阶函数
fun processProduct(product:Product, area:(name:String)->String):Product
{
product.area = area("iPhone")
return product
}
fun mobilePhoneArea(name:String):String
{
return "${name} 美国"
}
fun main(args: Array<String>)
{
var product = MobilePhone()
processProduct(product, ::mobilePhoneArea)
println(product)
// 使用Lambda表达式
processProduct(product)
{
name->"${name} 法国"
}
println(product)
// 省略了Lambda表达式的参数
processProduct(product)
{
"${it}苏联"
}
println(product)
// 使用匿名函数
processProduct(product,fun(name:String):String = "${name} 中国")
println(product)
}
output: