Skip to content

Latest commit

 

History

History
71 lines (54 loc) · 2.09 KB

2012-09-09-tuples.md

File metadata and controls

71 lines (54 loc) · 2.09 KB
layout title original-doc
doc
元组(Tuples)

元组(二元对(pair)、三元组(triples)、依此类推...)在我们需要一个轻量级的组织数据的机制时很有用。 比如,当函数需要返回多个值的时候。

元组类型和字面量

元组功能已经被弃用(deprecated)了。不久将从语言中删除

在Kotlin中,有22个元组类型:Tuple0Tuple22。Tuple0(也被叫做Unit)有0个类型参数, Tuple1有一个,依次类推。类型参数决定元组中每一个元素的类型。比如,Tuple2是如下定义的: {% highlight java %} class Tuple2<out T1, out T2>( val _1 : T1, val _2 : T2 ) {% endhighlight %}

我们可以使用简写的语法来表示元组:

{% highlight java %} val intStrPair : #(Int, String) = #(1, "") // 和 'Tuple2<Int, String>(1, "")' 一样 {% endhighlight %}

使用模式匹配可以反问元组的元素: {% highlight java %} when (x) { is #(null, *) => throw NullPointerException() is #(val a, val b) => print(a, b) } {% endhighlight %}

或者直接使用访问器_1_2等: {% highlight java %} print("left = ${pair._1}, right = ${pair._2}") {% endhighlight %}

如果希望访问器更可读,可以使用带标签的元组

Labled tuples

我们可以给元组的元素定义标签: {% highlight java %} val point : #(x : Int, y : Int) {% endhighlight %}

这样元组就可以利用这些标签来访问: {% highlight java %} print("x = ${point.x}, y = ${point.y}") {% endhighlight %}

我们甚至可以用命名的元素来创建元组,并且这时候顺序也不再重要:

{% highlight java %} val point : #(x : Int, y : Int) = #(y = 10, x = 5) {% endhighlight %}

带标签的元组功能还没有实现 参考相关的issue

接下来: