本文最后更新于 106 天前,其中的信息可能已经有所发展或是发生改变。
结构体解释
结构体包含多个相关的值,与元组相似的是,它也可以包含多个不同类型的值,与元组不同的是,结构体的值需要命名来让值更加清晰,这也让结构体更加灵活,我们不必像元组一样依赖顺序进行访问或指定
基础写法
struct User {
username:String,
age:u8,
hobby:String,
smoking:bool,
}
结构体需要进行实例化才可以使用,如果实例时值与命名相同可以省略,实例化默认为不可变
let mut user = User{
username,
age:10,
hobby,
smoking:true,
}
结构体的可以使用 . 来进行索引如
user.age = 11;
特性
- 结构体更新语法: 使用现有实例创建新实例时可用 *…*语法复制剩余实例
- 当字段名不重要时可用元组结构体
- 可用类单元结构体标记类型而不存储数据
- 结构体所有权
- 打印结构体使用#[derive(debug)]
- 使用模式匹配解构结构体
//特性1
let user2 = User{
age = 11,
..user
}
//特性2
struct Yuanzu=(i32,u8);
//特性3
struct Danyuan;
//特性4
//结构体中可以使用引用但必须标注生命周期,结构体中某一字段所有权发生转移则这一实例将无法使用,但其他字段不受影响
let user1 = User{
username:String::from("小明"),
age:18,
hobby=String::from("打飞机"),
smoking:true,
}
let user2 =User{
age:20,
..user1
}
//这里username和hobby所有权转移,smoking为简单类型,不发生所有权转移,所以之后调用user1.username或user1会报错,user1.age可正常调用