2016-03-09 93 views
6

科特林支持解構聲明:是否可以在函數參數中使用解構?

val (a, b) = Pair(1,2) 

這類似於Python的迭代拆包:

a, b = (1, 2) 

Python中也有圖示/價差操作,使您可以用函數的參數進行類似的操作:

def f(a, b): pass 
pair = (1,2) 
f(*pair) 

kotlin有類似的能力嗎?很顯然,你可以手動打開結構:

f(pair.component1(), pair.component2()) 

但這是笨重的。有沒有辦法更優雅地做到這一點?我在docs on the subject中看不到任何東西。

回答

9

不,這可能僅適用於數組和可變參數,功能

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

這太糟糕了。奇怪的是,傳播運算符以這種有限的方式存在。 –

0

您可以定義一個擴展函數來傳播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.

相關問題