当前位置: 首页 > article >正文

Rust `struct`和 `enum`番外《哪吒、白蛇传?》


第一章:混天绫引发的血案——没有 struct 的江湖有多乱

天庭码农哪吒最近很头疼。
他写了个程序管理法宝库,结果代码乱成一锅粥:

// 哪吒的早期代码:法宝属性分散传递  
fn print_treasure(name: String, power_level: u32, is_bound: bool) {  
    println!("法宝 {},威力 {},绑定状态:{}", name, power_level, is_bound);  
}  

fn main() {  
    // 乾坤圈参数传反了!  
    print_treasure(  
        9999,        // 威力值  
        "乾坤圈".to_string(), // 名字  
        false         // 绑定状态  
    );  
}  

结果:天庭服务器直接崩溃,哪吒被玉帝罚扫凌霄殿厕所三天。
“啊啊啊!参数顺序全乱了!这代码比孙悟空的紧箍咒还难念!” 哪吒抓狂道。


第二章:太乙真人传授 struct 心法

师父太乙真人看不下去了,甩出一本《Rust 数据结构真经》:
“徒儿,试试用 struct 把法宝属性打包!”

struct 法宝 {  
    名字: String,  
    威力: u32,     // 单位:雷劫值  
    已绑定: bool,  
}  

impl 法宝 {  
    fn 展示(&self) {  
        println!("【{}】威力 {} 雷劫,绑定状态:{}",  
            self.名字, self.威力, if self.已绑定 { "已认主" } else { "无主" }  
        );  
    }  
}  

fn main() {  
    let 混天绫 = 法宝 {  
        名字: "混天绫".to_string(),  
        威力: 9999,  
        已绑定: true,  
    };  

    混天绫.展示();  
}  

输出

【混天绫】威力 9999 雷劫,绑定状态:已认主  

哪吒恍然大悟:“原来 struct 就像乾坤袋,把零散属性装在一起,再也不用担心参数顺序了!”


第三章:白素贞的 enum 渡劫指南

另一边,西湖码农白素贞正在为雷峰塔系统发愁:

// 白素贞的旧代码:用字符串区分妖怪类型  
struct 妖怪 {  
    类型: String,  // "蛇精"/"狐妖"/"树妖"  
    道行: u32,  
}  

fn 降妖(妖怪: &妖怪) {  
    if 妖怪.类型 == "蛇精" {  
        println!("许仙快跑!");  
    } else if 妖怪.类型 == "树妖" {  
        println!("燕赤霞何在?");  
    }  
    // 忘了处理狐妖!  
}  

结果:狐妖姥姥趁机攻破雷峰塔,法海气得当场圆寂(假的)。

小青递上一本《Rust 枚举秘籍》:
“姐姐,试试 enum!”

enum 妖怪类型 {  
    蛇精,  
    狐妖(u32),  // 尾巴数量  
    树妖 { 树龄: u32, 品种: String },  
}  

struct 妖怪 {  
    类型: 妖怪类型,  
    道行: u32,  
}  

fn 降妖(妖怪: &妖怪) {  
    match &妖怪.类型 {  
        妖怪类型::蛇精 => println!("雄黄酒准备!"),  
        妖怪类型::狐妖(尾巴数) => println!("{}尾狐妖,请宝青坊主!", 尾巴数),  
        妖怪类型::树妖 { 树龄, 品种 } => println!("{}年的{}成精了!", 树龄, 品种),  
    }  
}  

fn main() {  
    let 姥姥 = 妖怪 {  
        类型: 妖怪类型::狐妖(9),  
        道行: 3000,  
    };  

    降妖(&姥姥);  
}  

输出

9尾狐妖,请宝青坊主!  

白素贞眼波流转:“原来 enum 是照妖镜,所有妖怪类型无所遁形,连漏掉分支编译器都会报警!”


第四章:敖丙的终极 combo——struct + enum

东海龙宫三太子敖丙最近在开发"天劫模拟器":

enum 天劫类型 {  
    雷劫(u32),        // 电压值  
    火劫(f64),        // 温度值  
    情劫 { 对象: String, 持续天数: u32 },  
}  

struct 渡劫任务 {  
    修炼者: String,  
    当前境界: String,  
    劫难: 天劫类型,  
}  

impl 渡劫任务 {  
    fn 播报(&self) {  
        print!("{} 正在渡 {} -> ", self.修炼者, self.当前境界);  
        match &self.劫难 {  
            天劫类型::雷劫(电压) => println!("遭雷劈中,电压 {} 万伏特!", voltage),  
            天劫类型::火劫(温度) => println!("三昧真火,温度 {:.1} 度!", temperature),  
            天劫类型::情劫 { 对象, 持续天数 } => println!("与 {} 纠缠 {} 天!", 对象, 持续天数),  
        }  
    }  
}  

fn main() {  
    let 哪吒任务 = 渡劫任务 {  
        修炼者: "哪吒".to_string(),  
        当前境界: "元婴期".to_string(),  
        劫难: 天劫类型::雷劫(100000),  
    };  

    let 白蛇任务 = 渡劫任务 {  
        修炼者: "白素贞".to_string(),  
        当前境界: "化神期".to_string(),  
        劫难: 天劫类型::情劫 {  
            对象: "许仙".to_string(),  
            持续天数: 1000,  
        },  
    };  

    哪吒任务.播报();  
    白蛇任务.播报();  
}  

输出

哪吒 正在渡 元婴期 -> 遭雷劈中,电压 100000 万伏特!  
白素贞 正在渡 化神期 -> 与 许仙 纠缠 1000 天!  

龙王抚须大笑:“妙啊!struct 如定海神针镇数据,enum 似龙宫万花筒显百态!”


终章:Rust 修仙委员会总结

  1. struct 是乾坤圈
    把散落四处的属性(名字、威力、状态)圈在一起,让数据不再"藕霸"(藕做的霸总,一碰就散)

  2. enum 是风火轮
    载着你上天入地处理各种情况,少一个分支都飞不起来!

  3. 合体技 = 数据结构の完全体
    struct 遇上 enum,就像哪吒开启三头六臂——既能稳守数据类型,又能横扫所有可能性!

所以下次当你代码里参数乱飞、类型如妖孽四起时,记得大喊一声:
struct 镇乾坤,enum 照妖镜,Rust 大道成!”

(此时一道天雷劈下,你的代码终于通过了编译…)


http://www.kler.cn/a/530973.html

相关文章:

  • DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力
  • Vuex状态管理
  • springboot 启动原理
  • 【llm对话系统】大模型 Llama 源码分析之 LoRA 微调
  • 深入解析“legit”的地道用法——从俚语到正式表达:Sam Altman用来形容DeepSeek: legit invigorating(真的令人振奋)
  • Appium介绍
  • 嵌入式知识点总结 操作系统 专题提升(三)-并发与互斥
  • 使用React和Material-UI构建TODO应用的前端UI
  • 无人机飞行惯导系统技术详解
  • deepseek本地部署+结合思路
  • sql主从同步
  • Med-R2:基于循证医学的检索推理框架:提升大语言模型医疗问答能力的新方法
  • URL 和 URI 的区别
  • java命令详解
  • 二维前缀和:高效求解矩阵区域和问题
  • 【实战篇】Android安卓本地离线实现视频检测人脸
  • LabVIEW图片识别逆向建模系统
  • 嵌入式知识点总结 操作系统 专题提升(四)-上下文
  • Vue3学习笔记-条件渲染和列表渲染-3
  • WPS动画:使图形平移、围绕某个顶点旋转一定角度
  • [SAP ABAP] ABAP SQL跟踪工具
  • RabbitMQ快速上手及入门
  • 机器学习10
  • guava:基于TypeToken解析泛型类的类型变量(TypeVariable)的具体类型
  • Python处理数据库:MySQL与SQLite详解
  • Python小游戏29乒乓球