在前端开发中,我们每天都在和 Object(对象)打交道。
1 | |
在 Rust 中,这叫 Struct (结构体)。
1. Struct:更严格的对象
语法几乎一模一样,只是把 interface 换成了 struct,把 const 换成了 let。
1 | |
最大的区别: 在 JS 里,你可以随时给对象追加属性 (user.isAdmin = true)。 在 Rust 里,不行。Struct 的形状在定义时就锁死了,既不能多,也不能少。
2. Enum:Rust 的“杀手锏”
这是本章的重头戏。
在 TypeScript 中,枚举 (Enum) 通常只是一组常量数字或字符串的映射:
1 | |
但在 Rust 中,枚举可以携带数据! 这让它变得极其强大,特别适合用来描述 “状态” 或者 “事件”。
想象一下你在写一个 Redux reducer,你有不同的 Action。有的 Action 不需要参数,有的需要字符串,有的需要对象。
在 Rust 里,我们可以把它们统统塞进一个 Enum:
1 | |
看懂了吗?PageLoad 只是个信号;但 Click 里面竟然直接打包了 x 和 y 坐标数据!
这意味着一个 WebEvent 类型的变量,可能是个简单的 PageLoad,也可能是个复杂的 Click 对象。这在处理复杂业务逻辑时非常优雅。
🧠 随堂小测验
我们将 Struct 和 Enum 结合起来做一个小练习。
假设我们在做一个 “消息通知系统”。 我们需要定义一个枚举 Message,它有两种可能的情况:
- Quit:退出(没有关联数据)。
- Write:写入消息(关联一个
String字符串)。
请根据上面的 WebEvent 例子,把下面的代码补充完整:
1 | |
请写出空白处应该填入的代码。
答案
🥳 Write(String)
这种写法叫做 Tuple Variant (元组变体)。你就像给这个枚举贴了个标签,顺便塞进去了一个数据包。