集合

元组(Tuples)

Tuples是Rust中,固定由不同元素组成的集合。 Tuples内的元素类型是固定的! 有限集是一个变量,而不是array这种多个变量的集合

let http_Error = (404,"Not Found!");

//带有类型的声明
let http_Error: (i32,&str) = (404,"Not Found!");

即使使用可变有限集,也不能将不同类型值赋予有限集的固定位置。下面的语句,会出现编译错误:

let mut x:(i32, &str) = (1, "Hello!");
x = ("Word","Hello!"); //编译错误,无法将"Word"字符串类型赋值给i32型

Tuples类型可以使用==互相比较,结果不单依据内部元素的值,排序也要一致才能相等。

let mut x = (1,2,3);
let mut y = (1,2,3);

if x == y {
    println!("yes"); //此时相等
}

x = (1,3,3);
if x == y {
} else {
    println!("no"); //此时不相等,因为x的第二个元素与y的第二个元素不相等
}

x = (2,1,3);
if x == y {
} else {
    println!("no"); //此时不相等,因为x的元素排列与y的元素排列不相等
}

当我们需要取出Tuples元组内的数据时,我们可以这么做:

let http_Error = (404,"Not found");
let (code, message) = http_Error;
println!("code is {},message is {}",code,message);

//code is 404,message is Not found

Struct 结构体

struct关键字声明一个结构体,Struct结构体的定义与有限集相似,都是不同类型的组合,但不同的是,在Struct中,每个元素有自己的命名。

struct Point {
    x:i32,
    y:i32,
}

我们可以这样使用结构体:

struct Point {
    x:i32,
    y:i32,
}

fn main() {
    let mut point = Point { x:0 , y:0 };
    point.x = 5;
    println!("The point is at ({}, {})", point.x, point.y);
}

最终的输出结果是The point is at (5, 0)

Tuples struct 有限结构体

Tuples struct有限结构体,就是Tuples类型的struct结构体化。 我们这样定义一个Tuples struct:

struct Color(i32,i32,i32);
struct Point(i32,i32);

显然,这就是再次匿名化的struct结构体,这种类型使用场景是什么呢?其实就是可以取出单一值的Tuples类型。

下面是一个适合使用Tuples struct的场景

struct Inches(i32);

let length = Inches(10);

let Inches(integer_length) = length;

println!("length is {} inches", integer_length);

enums 枚举类型

定义一个enums遍历对象也非常容易,如下所示

enum Character {
    Digit(i32),
    Other,
}

对于定义了变量类型的枚举,我们可以用来匹配对应的数据类型。例如下面的例子:

enum Shape {
    Circle(Point, f64),
    Rectangle(Point, Point)
}

这里定义的Shape enums枚举类型,可以匹配Circle圆或者Rectangle长方形两种数据结构。

当然,我们也可以像C语言中那样来用enum枚举

enum Direction {
    North,
    East,
    South,
    West
}

这种情况下,我们匹配的,就可以是四个方向。

同样,我们也可以给枚举指定默认值

enum Color {
  Red = 0xff0000,
  Green = 0x00ff00,
  Blue = 0x0000ff
}

这里,我们就显示的给颜色的枚举指定了值。如果没有指定值,枚举默认是从0开始分配,不断+1.

使用_可以在枚举中设置一个单独的字段,当所有其他不匹配对象都会指向这个匹配值。