所有权系统其实不难,只要记住五个规则即可。所有权系统确保每个资源只有一个主人,其他人要用就得借,借的时候要么大家一起看,要么一个人改。
所有权系统其实不难,只要记住五个规则即可。 所有权系统确保每个资源只有一个主人,其他人要用就得借,借的时候要么大家一起看,要么一个人改。
// 一份菜只能在一个餐桌上 🍜
let mut dish = String::from("北京烤鸭"); // 厨房准备好了一道烤鸭 🦆
let table_a = dish; // 菜被端到了A桌 🚶♂️
let table_b = dish;; // ❌ 错误!菜已经端到A桌
println!("A桌在吃:{}", table_a); // ✅ 正确,A桌能吃到烤鸭
// 可以让别人看看或闻闻香味 👃
let dish = String::from("红烧狮子头"); // 一盘香喷喷的狮子头 🍖
let customer = &dish; // 顾客看看菜品
println!("顾客看到:{}", customer); // 👨👩👦 顾客:看起来真不错!
println!("服务员还能看到:{}", dish); // 👨🍳 服务员:菜还在这呢
// 就像一道菜品在餐桌上,所有人都可以看到 👨👩👧👦
let dish = String::from("佛跳墙"); // 一道豪华的佛跳墙 🥘
let diner1 = &dish; // 食客1探头看看
let diner2 = &dish; // 食客2也要看看
let diner3 = &dish; // 食客3也凑热闹
// 大家都在赞叹这道菜 🤩
println!("食客1看到:{}", diner1);
println!("食客2看到:{}", diner2);
println!("食客3看到:{}", diner3);
// 就像一道菜只能被一个厨师在烹饪 🔥
let mut dish = String::from("半成品小龙虾"); // 还在制作的小龙虾 🦐
let chef = &mut dish;
chef.push_str("【已调味】"); // 厨师正在调味 🧂
// let helper = &mut dish; // ❌ 错误!帮厨不能同时加调料
println!("厨师在烹饪:{}", chef); // 👨🍳 厨师:别打扰,我在专心做菜!
// 就像菜品要么在展示,要么在制作 📸
let mut dish = String::from("清蒸鲈鱼"); // 一条美味的鲈鱼 🐟
let customers = &dish; // 顾客在看菜品
// let chef = &mut dish; // ❌ 错误!顾客正在看,厨师不能修改
println!("顾客在看:{}", customers); // 👨👩👧 顾客:哇,看起来好新鲜!
// 等顾客看完后,厨师可以继续加工 ⏳
let chef = &mut dish; // 现在可以修改了
chef.push_str("【已装盘】"); // 👨🍳 厨师:让我来做最后的装盘!
fn serve_dish(dish: String) {
println!("上菜了:{} 🚀", dish); // 菜已经端给客人了
}
fn main() {
let food = String::from("宫保鸡丁 🍗");
serve_dish(food); // 把菜从厨房端出去了
// println!("厨房还有这道菜吗?{}", food); // ❌ 错误!菜已经端走了
}
fn check_dish(dish: &String) {
println!("客人看看这道菜:{} 👀", dish);
}
fn main() {
let food = String::from("红烧狮子头 🍖");
check_dish(&food); // 让客人看看菜品
println!("菜品还在厨房:{} ✨", food); // ✅ 可以!因为只是让客人看看
}
每个变量只能有一个所有者(owner)
可以借用变量(borrow)
可以有多个不可变借用(immutable borrow)
同时只能有一个可变借用(mutable borrow)
不可变借用和可变借用不能同时存在
我们正在组建一支专注 AI + Web3 技术研发的团队,期待与你共同推动以下方向:
如果您对加密技术创新有热情,欢迎与我们共建未来:
联系方式:join@biteagle.xyz
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!