fn main()
{
let mut a = vec!["1".to_string(), "2".to_string()];
let r: &mut [String] = &mut a;
r.push("1".to_string());
}
字符串
如果不可能,我想知道为什么不能使用切片的mut ref来完成。
Compiling Practise v0.1.0 (C:\My Files\Coding\Reading_Material\Rust\Practise)
error[E0599]: no method named `push` found for mutable reference `&mut [String]` in the current scope
--> src\main.rs:4:7
|
4 | r.push("1".to_string());
| ^^^^ method not found in `&mut [String]`
For more information about this error, try `rustc --explain E0599`.
error: could not compile `Practise` due to previous error
型
1条答案
按热度按时间uajslkp61#
Vec
包含指针、长度和容量。当将新元素推送到Vec
时,如果为length < capacity
,则有额外的空间可供新元素使用。否则,Vec
可以被重新分配,从而增加生成length < capacity
的容量(并可能改变指针)。一个切片只包含一个指针和一个长度。由于不存在容量,因此不可能知道是否存在可用于新元素的附加容量或增加容量。
因此,对切片的可变引用只允许修改现有元素,而不允许添加新元素。只有对
Vec
的可变引用才能执行需要知道容量的修改。