Kotlin:將函數(shù)作為參數(shù)傳遞

Kotlin是一門(mén)與Swift類似的靜態(tài)類型JVM語(yǔ)言,由JetBrains設(shè)計(jì)開(kāi)發(fā)并開(kāi)源。與Java相比,Kotlin的語(yǔ)法更簡(jiǎn)潔、更具表達(dá)性,而且提供了更多的特性,比如,高階函數(shù)、操作符重載、字符串模板。它與Java高度可互操作,可以同時(shí)用在一個(gè)項(xiàng)目中。InfoQ
高階函數(shù)就是可以接受函數(shù)作為參數(shù)并返回一個(gè)函數(shù)的函數(shù)。Kotlin-in-Chinese

Kotlin 支持函數(shù)作為參數(shù)傳遞,無(wú)需構(gòu)建對(duì)象來(lái)包裝函數(shù)。

無(wú)參數(shù)函數(shù)調(diào)用

class Hello {

    fun say() {
        Timber.i("Hello World")
    }

    /**
    * 在 Kotlin 中無(wú)返回為 Unit
    *
    * 此方法接收一個(gè)無(wú)參數(shù)的函數(shù)并且無(wú)返回
    *
    * 使用參數(shù)名加 () 來(lái)調(diào)用
    */
    fun people(hello: () -> Unit) {
        hello()
    }

    /**
    * 在 kotlin 中有一個(gè)約定,如果最后一個(gè)參數(shù)是函數(shù),可以省略括號(hào)
    */
    fun main() {
        people ({ say() })
        people { say() }
    }

}

** 調(diào)用函數(shù)需使用參數(shù)名加 () **

Kotlin function no parameter.png

有參數(shù)函數(shù)調(diào)用

class Hello {

    fun say(msg: String) {
        Timber.i("Hello $msg")
    }

    /**
    * 當(dāng)調(diào)用的函數(shù)有形參時(shí),
    * 需要在調(diào)用的函數(shù)聲明,并使用聲明的形參;
    * 函數(shù)參數(shù)中的形參無(wú)法使用
    */
    fun people(arg0: String, hello: (arg1: String) -> Unit) {
        hello(arg0)
        // hello(arg1) 這樣調(diào)用將報(bào)錯(cuò)
    }

    fun main() {
        people("Android") { say("World") }
    }

}
Kotlin function parameter.png

傳入給 arg0 的值貌似未生效 ** ??? **

  • @param arg0 實(shí)參
  • @param arg1 形參
    people函數(shù)中,arg0 是實(shí)參,而 arg1 是形參,所以不能直接使用;
    有點(diǎn)繞 ?? ,可以看下這篇博文 Kotlin 雙冒號(hào) :: 使用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容