在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

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


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



})

問(wèn),以個(gè) lambda 怎樣寫成變參的?

圖片描述

回答
編輯回答
舊時(shí)光

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

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

// 使用匿名內(nèi)部類,較麻煩我覺(jué)得你肯定不會(huì)用
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來(lái)手動(dòng)實(shí)現(xiàn)可變參數(shù)的封裝過(guò)程,相對(duì)來(lái)說(shuō)還行,但要注意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
編輯回答
孤酒

沒(méi)有辦法寫出來(lái),參考https://stackoverflow.com/que...

2017年9月11日 03:03