有没有可能在函数参数中使用解构?
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。