复合类型
由其它类型组合而成的类型。
- 元组
- 数组
- 结构体
- 枚举
元组类型
元组类型英文叫Tuple类型,用圆括号表示,元组可以存放0个,1个或者多个元素,每个元素都可以有不同的数据类型。
数组类型
数组只能保存相同类型的元素。
创建数组的三种形式。
系统自动推断数据类型
let array0 = [1,2,3,100];
声明数据类型
let array1: [f64; 3] = [1.2,3.3,4.0];
如果值都是一样的,可以用省略语法
let array2 = [100;4];//等价于[100,100,100,100]
取数组中的元素
数组名称[索引]
结构体
结构体用struct修饰,结构体可以由多个属性,取值的时候对象名称.属性名称
struct Student{
name: &'static str,
age: i8,
}
fn main() {
let zhangsan = Student { name: "张三", age: 18 };
println!("age is {} name is {}", zhangsan.age, zhangsan.name);
}
如果想创建一个对象和之前的对象内容一样,可以用两个点,如果只是部分不一样,可以先自定赋值不一样的部分,再用两个点。
struct Student {
name: &'static str,
age: i8,
}
fn main() {
let zhangsan = Student {
name: "张三",
age: 18,
};
let libai = Student { ..zhangsan };
println!("age is {} name is {}", libai.age, libai.name);
let lisi = Student {
name: "李四",
..zhangsan
};
println!("age is {} name is {}", lisi.age, lisi.name);
}
如果对象的属性名称和要赋值的变量名称一致,可以用省略的写法。
let zhangsan = Student {
name: "张三",
age: 18,
};
let name = "李四";
let age = 20;
let lisi = Student {
name,
age
};
两种特殊的结构体:元组结构体和单元结构体。
// 元组结构体
// 没有属性名称的结构体
struct Color(i32, i32, i32);
// 单元结构体
// 没有属性的结构体
#[derive(PartialEq)]
struct Person;
fn main() {
// 错误写法,注意声明元组结构体的时候用的是元组的标识符圆括号。
// let red = Color{255,0,0};
let red = Color(255, 0, 0);
println!("{} {} {}", red.0, red.1, red.2);
// 这里不需要括号,2个变量指向同一个内存空间
let person1 = Person;
let person2 = Person;
println!("{}",person1==person2);
}
枚举类型
枚举类型用enum关键字。
enum Sex {
Man,
Woman
}
fn main() {
let nan = Sex::Man;
match nan {
Sex::Man => println!("男"),
Sex::Woman => println!("女")
}
}