基本

元组只是多个值的串联:

  • 可能是不同类型的
  • 其数量和类型是静态知道的

例如,(1, "Hello") 是由 i32&str 组成的 2 元素元组,其类型以与其值类似的方式表示为 (i32, &'static str)

要访问元组的元素,只需使用其索引:

let tuple =  (1, "Hello");
println!("First element: {}, second element: {}", tuple.0, tuple.1);

因为元组是内置的,所以也可以在元组上使用模式匹配

match (1, "Hello") {
    (i, _) if i < 0 => println!("Negative integer: {}", i),
    (_, s) => println!("{} World", s),
}

特别案例

0 元素元组:() 也称为单位单位类型单例类型,用于表示缺少有意义的值。它是函数的默认返回类型(未指定 -> 时)。另请参阅: Rust 中的“type()”是什么类型?

1 元素元组:(a,),带尾随逗号,表示 1 元素元组。没有逗号 (a) 的表单被解释为括在括号中的表达式,并且仅计算为 a

虽然我们在这里,但总是接受尾随逗号:(1, "Hello",)

限制

除了元组之外,今天的 Rust 语言不支持可变参数。因此,不可能简单地为所有元组实现特征,因此标准特征仅针对有限数量元素的元组实现(今天,包括最多 12 个元素)。支持具有更多元素的元组,但不实现标准特征(尽管你可以为它们实现自己的特征)。

希望将来能够解除这一限制。