- 🌟🌟 我们可以使用 #[derive(Debug)] 让结构体变成可打印的.
// 填 空 , 让 代 码 工 作
#[__]
struct Rectangle {
width: u32,
height: u32,
}
fn main() {
let scale = 2;
let rect1 = Rectangle {
width: dbg!(30 * scale), // 打 印 debug 信 息 到 标 准 错 误 输 出 stderr,并 将30 * scale height: 50, }; dbg!(&rect1); // 打 印 debug 信 息 到 标 准 错 误 输 出 stderr println!(__, rect1); // 打 印 debug 信 息 到 标 准 输 出 stdout } 结构体的所有权 当解构一个变量时,可以同时使用 move 和引用模式绑定的方式。当这么做时,部分 move 就会发生:变 量中一部分的所有权被转移给其它变量,而另一部分我们获取了它的引用。 在这种情况下,原变量将无法再被使用,但是它没有转移所有权的那一部分依然可以使用,也就是之前被 引用的那部分。 示例 fn main() { #[derive(Debug)] struct Person { name: String, age: Box<u8>, } let person = Person { name: String::from("Alice"), age: Box::new(20), }; // 通 过 这 种 解 构 式 模 式 匹 配 ,person.name 的 所 有 权 被 转 移 给 新 的 变 量
name// 但 是 , 这 里
age变 量 却 是 对 person.age 的 引 用, 这 里 ref 的 使 用 相 当 于: let age = &p let Person { name, ref age } = person; println!("The person's age is {}", age); println!("The person's name is {}", name); // Error! 原 因 是 person 的 一 部 分 已 经 被 转 移 了 所 有 权 , 因 此 我 们 无 法 再 使 用 它 //println!("The person struct is {:?}", person); // 虽 然
person作 为 一 个 整 体 无 法 再 被 使 用 , 但 是
person.age` 依 然 可 以 使 用
println!(“The person’s age from person struct is {}”, person.age);
}
练习 - 🌟🌟
// 修 复 错 误
#[derive(Debug)]
struct File {
name: String,
data: String,
}
fn main() {
let f = File {
name: String::from(“readme.md”),
data: “Rust By Practice”.to_string()
};
let _name = f.name;
// 只 能 修 改 这 一 行
println!(“{}, {}, {:?}”,f.name, f.data, f);
}
Rust从入门到实战系列二百七十四:打印结构体
最新推荐文章于 2024-05-21 13:14:04 发布