有没有可能在函数参数中使用解构?

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()) 

但是这很笨拙。 有没有办法更优雅地做到这一点? 关于这个问题,我没有看到任何文件 。

不,这只能用于数组和可变参数函数

 val foo = arrayOf(1, 2, 3) val bar = arrayOf(0, *foo, 4) 

@Ivan添加到答案,这里是相关的问题:

1)在函数调用中传递非可变参数的运算符:

https://youtrack.jetbrains.com/issue/KT-6732

2)解析lambda参数:

https://youtrack.jetbrains.com/issue/KT-5828

你可以为他们投票。

你可以定义一个扩展函数来传播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。