Kotlin支持解构声明:
val (a, b) = Pair(1,2)
这类似于Python的可迭代解包:
a, b = (1, 2)
Python还有一个splat / spread运算符,允许您使用函数参数执行类似的操作:
def f(a, b): pass
pair = (1,2)
f(*pair)
kotlin有相似的能力吗?显然,您可以手动解压缩结构:
f(pair.component1(), pair.component2())
但那很笨重。有没有办法更优雅地做到这一点?我在docs on the subject中看不到任何内容。
答案 0 :(得分:14)
不,这仅适用于数组和vararg函数
val foo = arrayOf(1, 2, 3)
val bar = arrayOf(0, *foo, 4)
答案 1 :(得分:11)
添加@Ivan的答案,以下是相关问题:
1)在函数调用中传播非vararg参数的运算符:
https://youtrack.jetbrains.com/issue/KT-6732
2)lambda参数的解构:
https://youtrack.jetbrains.com/issue/KT-5828
你可以投票给他们。
<强>更新强>
lambda参数的解构在Kotlin 1.1中实现。
答案 2 :(得分:2)
您可以定义扩展函数来传播Pair
的参数。像这样:
fun <A, B, R> Pair<A, B>.spread(f: (A, B) -> R) = f(first, second)
fun add(a: Int, b: Int) = a + b
fun main(args: Array<String>) {
println(Pair(1, 2).spread(::add))
}
这打印3。