高階函式和Lambda表示式
阿新 • • 發佈:2019-02-05
高階函式就是可以接受函式作為引數並返回一個函式的函式。
為高階函式傳遞函式型別引數值可以用如下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)
}
輸出: