集合
元组(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.
使用_
可以在枚举中设置一个单独的字段,当所有其他不匹配对象都会指向这个匹配值。