Kotlin 雙冒號 :: 將函數作爲參數使用

::方法名

雙冒號跟方法名作用就是將方法作爲參數傳入

class ColonMagic {

    /**
     * 不需要參數
     */
    private fun sayNoWords() {
        println(" no  msg   ")
    }

    /**
     * 一個參數
     * message:String類型
     */
    private fun say(message: String) {
        println(message)
    }

    /**
     * 兩個參數
     * msg: String類型
     * dosay: (String) -> Unit 一個參數爲String不需要返回值的方法體
     */
    private fun peopleDo(msg: String, doSay: (String) -> Unit) {
        //doSay(msg)調用的就是傳入的say方法,即say(msg),只不過參數名是doSay本質是say方法
        //此處打印出來 I say !  日誌
        doSay(msg)
    }

    fun people() {
        //調用peopleDo方法,並傳入參數  “I say !” 和 say方法體
        //此處 ::say 是將say方法作爲參數傳入peopleDo方法
        //此處只是將say作爲參數,而不會調用say方法,也就不會println(message),不會輸出日誌
        peopleDo("I say !", ::say)

        //此處報錯,因爲需要的是(String) -> Unit 一個String參數,無返回值
        //但是sayNoWords方法是沒有參數的,所以會報錯
        peopleDo("I say !", ::sayNoWords)
    }

}

fun main(msg: Array<String>) {
    ColonMagic().people();
}

mian方法中調用 ColonMagic().people();打印日誌如下

方法作爲參數傳入時不會被調用,所以最後只有一行 I  say !日誌。

 

 

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