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