::方法名
雙冒號跟方法名作用就是將方法作爲參數傳入
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 !日誌。