【百例RUST - 007】结构体
第一章 结构体基础用法
第01节 定义结构体
格式
struct 结构体名称 {
字段名称1 : 字段类型,
字段名称2 : 字段类型,
字段名称3 : 字段类型,
}
案例
rust
struct User {
name: String,
count: String,
nonce:u64,
active: bool,
}
第02节 构建实例
构建不可变的实例(只读)
格式
struct 实例名称 = 结构体名称 {
字段名称1 : 字段值1,
字段名称2 : 字段值2,
字段名称3 : 字段值3,
}
代码
rust
// 创建结构体实例
let xiaoming = User {
name: String::from("xiaoming"),
count: String::from("80001000"),
nonce: 10000,
active: true,
};
构建可变的实例(可修改)
格式
struct mut 实例名称 = 结构体名称 {
字段名称1 : 字段值1,
字段名称2 : 字段值2,
字段名称3 : 字段值3,
}
代码
rust
// 创建结构体实例
let mut xiaohuang = User {
name: String::from("xiaoming"),
count: String::from("80001000"),
nonce: 10000,
active: true,
};
第03节 获取值
案例代码1:
rust
fn main(){
// 定义结构体
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
// 构建实例
let xiaoming = User {
name: String::from("xiaoming"),
count: String::from("80001000"),
nonce: 10000,
active: true,
};
// 获取值
println!("name = {}", xiaoming.name); // name = xiaoming
}
案例代码2:
rust
fn main(){
// 定义结构体
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
// 构建实例
let xiaoming = User {
name: String::from("xiaoming"),
count: String::from("80001000"),
nonce: 10000,
active: true,
};
// 获取值, 存储到变量中
let value_count = xiaoming.count;
println!("value_count = {}", value_count); // value_count = 80001000
// println!("count = {}", xiaoming.count); // 注意上面出现了所有权的 MOVE 不能使用了
}
第04节 修改值
案例代码1:
rust
fn main(){
// 定义结构体
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
// 构建实例 不可变的结构体
let xiaoming = User {
name: String::from("xiaoming"),
count: String::from("80001000"),
nonce: 10000,
active: true,
};
// 修改变量
xiaoming.count = String::from("301000"); // 这里直接修改值, 会报错!因为当前是不可变的结构体
println!("xiaoming.count = {}", xiaoming.count);
}
案例代码2:
rust
fn main(){
// 定义结构体
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
// 构建实例 可变的结构体
let mut xiaoming = User {
name: String::from("xiaoming"),
count: String::from("80001000"),
nonce: 10000,
active: true,
};
// 修改变量
xiaoming.count = String::from("301000");
println!("xiaoming.count = {}", xiaoming.count); // xiaoming.count = 301000
}
第二章 其他方式构建结构体
第01节 参数名称和字段名同名
rust
fn main(){
// 定义结构体
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
let name = String::from("xiaohong");
let count = String::from("80001000");
let nonce = 10000;
let active = true;
// 构建实例, 这里可以简化书写
let xiaohong = User { name, count, nonce, active};
// 输出
println!("name = {}", xiaohong.name); // name = xiaohong
}
第02节 从其他结构体创建实例
案例代码1
所有属性,完全照抄
rust
fn main(){
// 定义结构体
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
let xiaoming = User {
name: String::from("xiaoming"),
count: String::from("80010010"),
nonce: 1000,
active: true,
};
// 构建实例
let xiaohong = User {
..xiaoming
};
// 输出
println!("count = {}", xiaohong.count); // count = 80010010
}
案例代码2
部分属性,自己定义,其他属性照抄
rust
fn main(){
// 定义结构体
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
let xiaoming = User {
name: String::from("xiaoming"),
count: String::from("80010010"),
nonce: 1000,
active: true,
};
// 构建实例
let xiaohong = User {
name: String::from("xiaohong"),
..xiaoming
};
// 输出
println!("name = {}", xiaohong.name); // name = xiaohong
}
第03节 元组结构体
rust
fn main(){
// 定义结构体
struct Point(i32, i32);
// 创建结构体实例
let a = Point(10, 20);
let b = Point(30, 50);
// 输出
println!("a.x = {} b.y={}", a.0, b.1); // a.x = 10 b.y=50
}
第04节 没有任何字段的类单元结构体
rust
fn main(){
// 定义结构体
struct A{ };
}
第三章 打印结构体
第01节 打印在一行
rust
fn main(){
// 创建结构体类型
#[derive(Debug)] // 这里需要加上宏
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
// 创建结构体实例
let xiaoming = User{
name: String::from("xiaoming"),
count: String::from("80001000"),
nonce: 10000,
active: true,
};
// 打印结构体, 打印在一行的写法
println!("xiaoming = {:?}", xiaoming);
}
// xiaoming = User { name: "xiaoming", count: "80001000", nonce: 10000, active: true }
第02节 打印在多行
rust
fn main(){
// 创建结构体类型
#[derive(Debug)] // 这里需要加上宏
struct User{
name: String,
count: String,
nonce:u64,
active: bool,
}
// 创建结构体实例
let xiaoming = User{
name: String::from("xiaoming"),
count: String::from("80001000"),
nonce: 10000,
active: true,
};
// 打印结构体, 打印在多行的写法
println!("xiaoming = {:#?}", xiaoming);
}
// xiaoming = User {
// name: "xiaoming",
// count: "80001000",
// nonce: 10000,
// active: true,
// }