我正在做沙丁鱼练习,有一个练习"move_semantics3.rs":
// move_semantics3.rs
// Make me compile without adding new lines-- just changing existing lines!
// (no lines with multiple semicolons necessary!)
// Scroll down for hints :)
pub fn main() {
let vec0 = Vec::new();
let mut vec1 = fill_vec(vec0);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
vec1.push(88);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
}
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
vec.push(22);
vec.push(44);
vec.push(66);
vec
}提示说:
这个和前一个不同之处在于,
fn fill_vec的第一行let mut vec = vec;已经不在了。可以将mut添加到一个地方,将现有的绑定更改为可变的绑定,而不是不变的绑定:)
我不知道如何通过只添加一个mut来更正这段代码。
发布于 2018-05-22 12:34:46
如果将代码复制/粘贴到操场,编译器会抱怨:
error[E0596]: cannot borrow immutable argument `vec` as mutable
--> src/main.rs:20:5
|
19 | fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
| --- consider changing this to `mut vec`
20 | vec.push(22);
| ^^^ cannot borrow mutably编译器什么都说:您必须用vec替换mut vec,因为默认情况下,在Rust变量中是不可变的。
https://stackoverflow.com/questions/50467621
复制相似问题