Kotlin函數類型的實例化

三種函數格式

1,函數字面值

1.1,Lambda

1.2,匿名函數

2,反射引用普通函數

3,實現函數類型接口的類

 

首先定義一個需要函數作爲參數的函數

fun myFunIns(data:Int, myFun:(arg:Int)->Int):Int{

    return myFun(data)

}

注意其中定義的函數類型是 (arg:Int)->Int ,也即參數是一個Int,返回一個Int

 

這是第一種格式,即函數字面值的Lambda表示法

    var result1 = myFunIns(123, {

        it * 2

    })

上面利用 it 做了簡化。也可以將 lambda 抽取出來,此刻無法使用 it 簡化:

    var result1 = myFunIns(123, {

        data ->

        data * 2

    })

 

第二種格式,是函數字面值的匿名函數

    var result2 = myFunIns(123, fun(data:Int):Int{

        return data * 3

    })

同樣,匿名函數可以抽取出來

    val result2_fun = fun(data:Int):Int{ //We can extract it out

        return data * 3

    }

 

第三種是反射引用格式

    fun myFun(data:Int):Int{

        return data * 4

    }

    val result3 = myFunIns(123, ::myFun)

 

第四種是偶然看到的,通過一個類實現一個接口,該接口有一個函數。

    class MyFun:(Int)->Int{

        override operator fun invoke(data:Int):Int{

            return data * 5

        }

    }

    val result4 = myFunIns(123, MyFun())

 

比較繞,尚不知何種情況使用

 

實踐代碼:https://gist.github.com/maxyou/6527b0f2019704ce7ae257d5cb17791b

 

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