2016-03-09 4 views
6

Kotlinは、非構造の宣言をサポートしています。関数の引数に構造体を使用することはできますか?

a, b = (1, 2) 

Pythonはまた、あなたが関数の引数と同様の操作を行うことができますスプラット/スプレッド演算子を持っています:

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

これは、Pythonの反復可能なアンパックに似ています

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

kotlinは同様の能力を持っていますか?明らかに、構造を手動で解凍することができます:

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

しかし、それはclunkyです。それをもっとエレガントにする方法はありますか? docs on the subjectに何も表示されません。非可変引数引数の

1)スプレッド演算子:

答えて

9

いいえ、これが唯一の@Ivanによって解答に追加配列と可変引数関数

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.

関連する問題