高階函數和Lambda表達式

高階函數就是可以接受函數作爲參數並返回一個函數的函數。
爲高階函數傳遞函數類型參數值可以用如下3種方法
1. 直接定義函數,並傳遞,在函數名前需要加::
1. 使用Lambda表達式
1. 使用匿名函數

//  高階函數(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)
}

輸出:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章