鍍金池/ 問答/網(wǎng)絡(luò)安全/ kotlin 的 lambda 能不能是個變參函數(shù)

kotlin 的 lambda 能不能是個變參函數(shù)

想實現(xiàn)一個類似 js 中的功能


require(["a", "b", "c"], function(a, b, c){



})

問,以個 lambda 怎樣寫成變參的?

圖片描述

回答
編輯回答
舊時光

很遺憾無法實現(xiàn),正如codegoose提供的StackOverflow的問答所述,kotlin的lambda暫沒提供vararg修飾符的支持

想要實現(xiàn)你所需的函數(shù)定義,以下是我所知的兩種較為接近的實現(xiàn)方式

// 使用匿名內(nèi)部類,較麻煩我覺得你肯定不會用
interface Cry {
    fun crying(vararg x : String)
}

private fun require(vararg config: String, cry: Cry) {
    cry.crying(*config)
}

fun test1() {
    val config = arrayOf("1", "2")
    require(*config, cry = object : Cry {
        override fun crying(vararg x: String) = x.forEach(::println)
    })
}

// 使用arrayOf來手動實現(xiàn)可變參數(shù)的封裝過程,相對來說還行,但要注意vararg參數(shù)數(shù)組的類型不是標(biāo)準(zhǔn)類型,在此處是Array<out String>
private fun require(vararg config: String, block : (Array<out String>) -> Unit) {
    block(config)
    block(arrayOf("1", "2", "3"))
}

fun test2() {
    val config = arrayOf("1", "2")
    require(*config, block = { it.forEach(::println)})
}
2017年2月23日 01:46
編輯回答
孤酒

沒有辦法寫出來,參考https://stackoverflow.com/que...

2017年9月11日 03:03