Higher-Order Functions and Lambda Expressions

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:
write picture description here

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325640103&siteId=291194637