可变切片 (Mutable slices)

每次我们谈到切片类型(如 str[T])时,用的都是其不可变借用形式(&str&[T])。
但切片也可以是可变的!

下面是创建可变切片的方式:

let mut numbers = vec![1, 2, 3];
let slice: &mut [i32] = &mut numbers;

然后你可以修改切片中的元素:

slice[0] = 42;

这会把 Vec 的第一个元素改成 42

局限性 (Limitations)

谈不可变借用时,建议很明确:优先用切片引用而非对所有权类型的引用(例如 &[T] 优于 &Vec<T>)。
对可变借用来说不是这样。

考虑下面这个场景:

let mut numbers = Vec::with_capacity(2);
let mut slice: &mut [i32] = &mut numbers;
slice.push(1);

这无法编译!
pushVec 上的方法,而不是切片上的方法。这是更普遍的一条原则的体现:Rust 不允许你向切片添加或移除元素,你只能修改/替换已经存在的元素。

在这一点上,&mut Vec&mut String 严格强于 &mut [T]&mut str
依据你需要执行的操作选最合适的类型。

原文链接:英文原文