Rust幼儿园系列(1)-所有权系统

所有权系统其实不难,只要记住五个规则即可。所有权系统确保每个资源只有一个主人,其他人要用就得借,借的时候要么大家一起看,要么一个人改。

目录

所有权规则

所有权系统其实不难,只要记住五个规则即可。 所有权系统确保每个资源只有一个主人,其他人要用就得借,借的时候要么大家一起看,要么一个人改。

规则一:每个变量只能有一个所有者 🍽

// 一份菜只能在一个餐桌上 🍜
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("【已装盘】");  // 👨‍🍳 厨师:让我来做最后的装盘!

实际例子

例子1:转移所有权

fn serve_dish(dish: String) {    
    println!("上菜了:{} 🚀", dish);  // 菜已经端给客人了
}

fn main() {    
    let food = String::from("宫保鸡丁 🍗");    
    serve_dish(food);  // 把菜从厨房端出去了    
    // println!("厨房还有这道菜吗?{}", food);  // ❌ 错误!菜已经端走了
}

例子2:借用

fn check_dish(dish: &String) {
    println!("客人看看这道菜:{} 👀", dish);
}

fn main() {    
    let food = String::from("红烧狮子头 🍖");    
    check_dish(&food);  // 让客人看看菜品    
    println!("菜品还在厨房:{} ✨", food);  // ✅ 可以!因为只是让客人看看
}

总结

五个简单的规则 📝

  • 每个变量只能有一个所有者(owner)

  • 可以借用变量(borrow)

  • 可以有多个不可变借用(immutable borrow)

  • 同时只能有一个可变借用(mutable borrow)

  • 不可变借用和可变借用不能同时存在

记住要点 🌟

  1. 这个值现在谁拥有?🤔
  2. 我是要拥有还是借用?🎯
  3. 我是要看还是要改?📝

我们正在组建一支专注 AI + Web3 技术研发的团队,期待与你共同推动以下方向:

  • 数据开发工程师
  • 爬虫工程师
  • 后端开发工程师
  • 网络安全工程师
  • Web3海外运营

如果您对加密技术创新有热情,欢迎与我们共建未来:
联系方式:join@biteagle.xyz

  • 原创
  • 学分: 0
  • 分类: Rust
  • 标签:
点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
比特鹰
比特鹰
0x18E5...7220
比特鹰是国内领先的AI+Web3公司,高速发展阶段,如果您在找工作,欢迎投简历:join@biteagle.xyz