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

ops/2025/2/4 14:49:57/

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

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

rust">// 哪吒的早期代码:法宝属性分散传递  
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 把法宝属性打包!”

rust">struct 法宝 {  名字: String,  威力: u32,     // 单位:雷劫值  已绑定: bool,  
}  impl 法宝 {  fn 展示(&self) {  println!("【{}】威力 {} 雷劫,绑定状态:{}",  self.名字, self.威力, if self.已绑定 { "已认主" } else { "无主" }  );  }  
}  fn main() {  let 混天绫 = 法宝 {  名字: "混天绫".to_string(),  威力: 9999,  已绑定: true,  };  混天绫.展示();  
}  

输出

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

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


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

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

rust">// 白素贞的旧代码:用字符串区分妖怪类型  
struct 妖怪 {  类型: String,  // "蛇精"/"狐妖"/"树妖"  道行: u32,  
}  fn 降妖(妖怪: &妖怪) {  if 妖怪.类型 == "蛇精" {  println!("许仙快跑!");  } else if 妖怪.类型 == "树妖" {  println!("燕赤霞何在?");  }  // 忘了处理狐妖!  
}  

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

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

rust">enum 妖怪类型 {  蛇精,  狐妖(u32),  // 尾巴数量  树妖 { 树龄: u32, 品种: String },  
}  struct 妖怪 {  类型: 妖怪类型,  道行: u32,  
}  fn 降妖(妖怪: &妖怪) {  match &妖怪.类型 {  妖怪类型::蛇精 => println!("雄黄酒准备!"),  妖怪类型::狐妖(尾巴数) => println!("{}尾狐妖,请宝青坊主!", 尾巴数),  妖怪类型::树妖 { 树龄, 品种 } => println!("{}年的{}成精了!", 树龄, 品种),  }  
}  fn main() {  let 姥姥 = 妖怪 {  类型: 妖怪类型::狐妖(9),  道行: 3000,  };  降妖(&姥姥);  
}  

输出

9尾狐妖,请宝青坊主!  

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


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

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

rust">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.ppmy.cn/ops/155588.html

相关文章

【Jax和Flax介绍】

Jax 的概述 背景:由Google开发的开源机器学习库,结合了NumPy、Autograd和XLA,旨在提供一个高效且灵活的机器学习研究平台。核心功能: 自动微分:通过Autograd实现自动求导,简化了梯度计算。GPU加速&#xf…

使用大语言模型在表格化网络安全数据中进行高效异常检测

论文链接 Efficient anomaly detection in tabular cybersecurity data using large language models 论文主要内容 这篇论文介绍了一种基于大语言模型(LLMs)的创新方法,用于表格网络安全数据中的异常检测,称为“基于引导式提示…

【C++】线程池实现

目录 一、线程池简介线程池的核心组件实现步骤 二、C11实现线程池源码 三、线程池源码解析1. 成员变量2. 构造函数2.1 线程初始化2.2 工作线程逻辑 3. 任务提交(enqueue方法)3.1 方法签名3.2 任务封装3.3 任务入队 4. 析构函数4.1 停机控制 5. 关键技术点解析5.1 完美转发实现5…

线性调整器——耗能型调整器

线性调整器又称线性电压调节器,以下是关于它的介绍: 基本工作原理 线性调整器的基本电路如图1.1(a)所示,晶体管Q1(工作于线性状态,或非开关状态)构成一个连接直流源V和输出端V。的可调电气电阻,直流源V由60Hz隔离变压器(电气隔离和整流&#…

蓝桥杯嵌入式uart,iic,adc_scan模版

本次用到的是ttl电平 1.波特率配置 2.中断使能 为什么会乱码 //uartmy_main.h #include "my_main.h" uint8_t led_sta0x10; char text[30]; char uart_tx[50]; char uart_rx[50];extern struct Bkeys bkey[]; char passwd[3]{1,2,3}; void LED_Disp(uint8_t dsLED)…

deepseek-r1模型本地win10部署

转载自大佬:高效快速教你deepseek如何进行本地部署并且可视化对话 deepseek 如果安装遇到这个问题 Error: Post “http://127.0.0.1:11434/api/show”: read tcp 127. 用管理员cmd打开 接着再去切换盘符d: cd 文件夹 重新下载模型:ollama run deepseek…

Kafka中文文档

文章来源:https://kafka.cadn.net.cn 什么是事件流式处理? 事件流是人体中枢神经系统的数字等价物。它是 为“永远在线”的世界奠定技术基础,在这个世界里,企业越来越多地使用软件定义 和 automated,而软件的用户更…

Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview

Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview 文章目录 Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview1. Introduction&Abstract1. LLM面临的问题2. RAG核心三要素3. RAG taxonomy 2. Overv…