第9步 使用元组
另一个有用的容器对象是元组(tuple)。跟list类似,元组也是不可变的,不过跟list不同的是,元组可以容纳不同类型的元素。列表可以是List[Int]或List[String],而元组可以同时包含整数和字符串。当你需要从方法返回多个对象时,元组非常有用。在Java中遇到类似情况通常会创建一个类似JavaBean那样的类来承载多个返回值,而用Scala可以简单地返回一个元组。元组用起来很简单:要实例化一个新的元组,只需要将对象放在圆括号当中,用逗号隔开即可。一旦实例化好一个元组,可以用英文句点、下画线和从1开始的序号来访问每一个元素。见示例3.4:
示例3.4 创建并使用一个元组
在示例3.4的第一行,创建了一个新的元组,包含了整数99作为其第一个元素,以及字符串"Luftballons"作为其第二个元素。Scala会推断出这个元组的类型是Tuple2[Int, String],并将这个作为变量pair的类型。在第二行,访问的是字段_1,产出第一个元素,即99。这里的“.”跟用于访问字段或调用方法时使用的方式相同。在本例中,访问的是一个名为_1的字段。如果执行这段脚本,将会看到:
元组的实际类型取决于它包含的元素以及元素的类型。因此,(99, "Luftballons")这个元组的类型是Tuple2[Int, String],而元组('u', 'r', "the", 1, 4, "me")的类型是Tuple6[Char, Char, String, Int, Int, String]。[5]
访问元组中的元素
你也许正好奇为什么不能像访问列表元素,也就是“pair(0)”那样访问元组的元素。背后的原因是列表的apply方法永远只返回同一种类型,但元组里的元素可以是不同类型的:_1可能是一种类型,_2可能是另一种,等等。这些_N表示的字段名是从1开始而不是从0开始的,这是由其他同样支持静态类型元组的语言设定的传统,比如Haskell和ML。