kotlin 的 lambda 能不能是个变参函数

想实现一个类似 js 中的功能


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



})

问,以个 lambda 怎样写成变参的?

图片描述

阅读 2.6k
2 个回答

很遗憾无法实现,正如codegoose提供的StackOverflow的问答所述,kotlin的lambda暂没提供vararg修饰符的支持

想要实现你所需的函数定义,以下是我所知的两种较为接近的实现方式

// 使用匿名内部类,较麻烦我觉得你肯定不会用
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来手动实现可变参数的封装过程,相对来说还行,但要注意vararg参数数组的类型不是标准类型,在此处是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)})
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进