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

news/2025/2/4 8:13:09/

第一章:混天绫引发的血案——没有 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/news/1569180.html

相关文章

安卓(android)读取手机通讯录【Android移动开发基础案例教程(第2版)黑马程序员】

一、实验目的(如果代码有错漏,可在代码地址查看) 1.熟悉内容提供者(Content Provider)的概念和作用。 2.掌握内容提供者的创建和使用方法。 4.掌握内容URI的结构和用途。 二、实验条件 1.熟悉内容提供者的工作原理。 2.掌握内容提供者访问其…

Android学习19 -- 手搓App

1 前言 之前工作中,很多时候要搞一个简单的app去验证底层功能,Android studio又过于重型,之前折腾gradle堪称噩梦。所以搞app都只有找应用的同事帮忙。一直想知道一些简单的app怎么能手搓一下,简单快速的搞出来。趁着现在有时间&…

Kamailio、MySQL、Redis、Gin后端、Vue.js前端等基于容器化部署

基于容器化的部署方案,通常会将每个核心服务(如Kamailio、MySQL、Redis、Gin后端、Vue.js前端等)独立运行在不同的容器中,通过Docker或Kubernetes统一管理。以下是具体实现方式和关键原因: 1. 容器化部署的核心思路 每…

【Linux系统】—— make/makefile

【Linux系统】—— make/makefile 1 什么是 make/makefile2 第一版本makefile3 依赖关系和依赖方法4 清理4.1 清理的基本语法4.2 make 的默认执行4.3 为什么要加 『.PHONY:clean』4.3.1 『.PHONY:clean』的功能4.3.2 如何理解总是不被执行4.3.2 如何区分文件的新旧 5 第二版本m…

Java | CompletableFuture详解

关注:CodingTechWork CompletableFuture 概述 介绍 CompletableFuture是 Java 8 引入的一个非常强大的类,属于 java.util.concurrent 包。它是用于异步编程的一个工具,可以帮助我们更方便地处理并发任务。与传统的线程池或 Future 对比&…

C#魔法秘籍:委托与事件,开启多态回调与消息派对之旅

一、引言:踏入 C# 魔法世界 嘿,各位编程小伙伴们!欢迎来到 C# 的奇幻世界,今天我们要一起探索两个超级有趣又强大的特性 —— 委托(Delegate)和事件(Event)。这两个家伙可是 C# 编程…

跨平台文件互传工具

一款高效便捷的文件互传工具,支持在线快速传输各种文件格式,无需注册,直接分享文件。适用于个人和团队间的文件共享,跨平台支持,轻松解决文件传输问题。免费的文件传输服务,让你的工作更高效。 gotool

redis原理之数据结构

dict dict,哈希表,redis 所有的 key-value 都存储在里面。如果曾经学过哈希表这种数据结构,那么很容易能写出一个来,但 redis dict 考虑了更多的功能。 // 哈希表(字典)数据结构,redis 的所有键…