tuple

let a = (0,);  // a是一个元组,它有一个元素
let b = (0);   // b是一个括号表达式,它是i32类型

let p = (1i32, 2i32);
let (a, b) = p;

let x = p.0;
let y = p.1;
println!("{} {} {} {}", a, b, x, y);

元组内部也可以一个元素都没有,这个类型单独有一个名字,叫 unit(单元类型):

let empty : () = ();
tuple struct

Rust有一种数据类型叫做tuple struct,它就像是tuple和struct的混合。区别在于,tuple struct有名字,而它们的成员没有名字:

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
  • tuple 类型没有自己的名字,每个成员也没有自己的名字;
  • tuple struct 类型有自己的名字,但是每个成员没有自己的名字;
  • struct 类型有自己的名字,而且每个成员也有自己的名字。

tuple struct有一个特别有用的场景,那就是当它只包含一个成员的时候,就是所谓的new type idiom。因为它实际上让我们非常方便地在一个类型的基础上创建了一个新的类型。举例如下:

struct Inches(i32);