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 修仙委员会总结
-
struct
是乾坤圈
把散落四处的属性(名字、威力、状态)圈在一起,让数据不再"藕霸"(藕做的霸总,一碰就散) -
enum
是风火轮
载着你上天入地处理各种情况,少一个分支都飞不起来! -
合体技 = 数据结构の完全体
当struct
遇上enum
,就像哪吒开启三头六臂——既能稳守数据类型,又能横扫所有可能性!
所以下次当你代码里参数乱飞、类型如妖孽四起时,记得大喊一声:
“struct
镇乾坤,enum
照妖镜,Rust 大道成!”
(此时一道天雷劈下,你的代码终于通过了编译…)