rust编程学习(二):复合数据类型
复合数据类型是由其他类型组合而成的类型。Rust的复合数据类型有元组、数组、布局体、枚举等, 通过一些简朴的例子帮助各人快速相识Rust复合类型。1 元组类型
[*] 元组类型是由一个或多个类型的元素组合成的复合类型,利用小括号“()”把所有元素放在一起。元素之间利用逗号“,”分隔。
[*] 元组中的每个元素都有各自的类型,且这些元素的类型可以差别。
[*] 元组的长度固定,一旦界说就不能再增长或缩短。
下面代码展示元组的一些利用方式:索引方式、元组解构、嵌套元组。元组解构实在就是对应元组中每个元素单独起一个名称进行取值。
fn main() {
let tup:(i32, f32, bool) = (1, 3.14, true); //显式声明元组类型
println!("索引: {} {} {}", tup.0, tup.1, tup.2); //用点进行索引访问
let (x, y, z) = tup; // 元组解构,将对应位置的元素分别赋值给变量x, y, z
println!("元组解构: x:{} y:{} z:{}", x, y, z);
let con_tup = (1, 2.1, (false, 3.24)); //嵌套元组
println!("嵌套元组: {} {} ({}, {})", con_tup.0, con_tup.1, con_tup.2.0, con_tup.2.1);
let (x, y, (z, w)) = con_tup; //嵌套元组解构
println!("嵌套元组解构: x:{} y:{} z:{} w:{}", x, y, z, w);
}
输出信息:
https://i-blog.csdnimg.cn/img_convert/359380ac6d84a542d87b4ff2379d5457.png
2.数组类型
数组类型是由相同类型的元素组合成的复合类型,我们可以利用表现,T代表元素类型,n代表长度即元素个数。
隐式声明时,Rust编译器会主动推导变量类型。
[*] 数组有如下3种声明和初始化方式:
fn main(){
//1.显式声明:i32类型的数组, 长度为10;进行初始化为1-10
let arr: = ;
//rust中 println!宏的参数: {:?} 可以打印debug的复合类型数据,比如数组、元组、结构体等
println!("数组: {:?}", arr); //打印数组
//2.隐式声明:i32类型的数组, 长度为10;进行初始化为1-10
let arr = ;
println!("数组: {:?}", arr);
//3.省略数组类型,为所有元素使用相同的值进行初始化。10个元素值都是1
let arr = ;
println!("数组: {:?}", arr);
}
输出信息:
https://i-blog.csdnimg.cn/img_convert/99f5f15c324142d3aafa65f7ca4b0139.png
3. 布局体类型
[*] 布局体类型是一个自界说数据类型,通过struct关键字加自界说定名,可以把多个类型组合在一起成为新的类型。和C/C++类似,采用struct关键字进行界说。
[*] 对于布局体打印内部各个元素,我们也可以利用println!("{:?}", xxx); 进行快速简便的打印,但是要在界说布局体前面加上#进行标识。
[*] 对于布局体声明时间,我们像省略参数,利用 #进行修饰,便可以在布局体初始化时间利用..Default::default()进行默认初始化。
fn main() {
# //使用derive宏,可以省略结构体的初始化值,使用默认值
# //使用derive宏,可以通过println!("{:?}", p1);打印结构体数据
struct Person { //定义结构体
name: String,
age: i32,
height: f32,
weight: f32,
};
let p1 = Person { //初始化结构体
name: "张三".to_string(),
age: 18,
height: 1.75,
weight: 80.0,
};
println!("{:?}", p1);
let p2 = Person { //可以将p1的部分值用于p2进行初始化
name: "李四".to_string(),
..p1 //结构体解构,使用p1的name, age, height, weight进行初始化
};
println!("{:?}", p2);
let p3 = Person { //默认初始化
name: "王五".to_string(),
..Default::default()
};
println!("{:?}", p3);
//索引单个元素
println!("索引 name={} age={} height={} weight={}", p3.age,p3.name,p3.height,p3.weight);
//嵌套结构体
#
struct Staff{
person:Person,
salary:i32,
department:String,
};
let mut s1 = Staff{ //初始化结构体 定义可变变量s1
person: p1, //把前面定义的p1赋值给person
salary:10000,
department:"研发部".to_string(),
};
//加薪
页:
[1]