好的,搞定了抽象层,我们回到最实用的数据存储上来。 在 JS 里,我们几乎只用 Array [] 和 Object {}。 在 Rust 里,我们也有一组对应的强力工具。
1. Vector (Vec<T>) —— 动态数组
Rust 里的原生数组(Array)长度是固定的(写死的)。这显然不够用。 我们在 JS 里习惯使用的那个“想塞多少就塞多少”的数组,在 Rust 里叫 Vector (向量),简称 Vec。
1 | |
注意点: Vec 也是分配在堆(Heap)上的,所以它也遵守所有权规则。当 todos 离开作用域,它里面的所有字符串也会被一起清理掉。
2. String vs &str —— 字符串的“人格分裂”
这是前端开发者学 Rust 最痛苦的地方,没有之一。
在 JS 里,字符串就是字符串。 在 Rust 里,字符串有两种主要形式:
String(大写 S):
- 所有者: 你拥有它。
- 可变: 可以修改、变长。
- 位置: 存储在堆 (Heap) 上。
- 类比: 像是一个完整的 Word 文档文件。
&str(字符串切片/引用):
- 借用者: 你只是借来看一眼。
- 不可变: 通常指向字面量或 String 的一部分。
- 位置: 栈 (Stack) 或 静态内存区。
- 类比: 像是 Word 文档里选中一段文字的“高亮区域”截图。
1 | |
💡经验之谈: 如果你是写库函数的作者,参数尽量用 &str;如果你是处理业务逻辑需要拥有数据,用 String。
3. HashMap —— 真正的 KV 存储
这就像 JS 中的 Map 或者普通的 Object。
1 | |
🧠 随堂小测验
关于 String 和 &str,请看下面的代码。
1 | |
请分别说出 A 和 B 的类型是什么?
- A:
String, B:&str - A:
&str, B:String - 都是
String