是否可以在函数参数中使用解构?

AA *_*A A 9 kotlin

Kotlin支持解构声明:

val (a, b) = Pair(1,2)
Run Code Online (Sandbox Code Playgroud)

这类似于Python的可迭代解包:

a, b = (1, 2)
Run Code Online (Sandbox Code Playgroud)

Python还有一个splat/spread运算符,允许您使用函数参数执行类似的操作:

def f(a, b): pass
pair = (1,2)
f(*pair)
Run Code Online (Sandbox Code Playgroud)

kotlin有相似的能力吗?显然,您可以手动解压缩结构:

f(pair.component1(), pair.component2())
Run Code Online (Sandbox Code Playgroud)

但那很笨重.有没有办法更优雅地做到这一点?我在这个主题文档中没有看到任何内容.

小智 15

不,这只适用于数组和vararg函数

val foo = arrayOf(1, 2, 3)
val bar = arrayOf(0, *foo, 4)
Run Code Online (Sandbox Code Playgroud)

  • 这太糟糕了。奇怪的是,散布算子以这种有限的方式存在。 (2认同)

Ing*_*gel 10

添加@Ivan的答案,以下是相关问题:

1)在函数调用中传播非vararg参数的运算符:

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

2)lambda参数的解构:

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

你可以投票给他们.


更新:

lambda参数的解构在Kotlin 1.1中实现.