我正在做Rustlings exercises并且有一个练习“move_semantics3.rs”:
MoPub.initializeSdk()
提示说:
这一点与之前的区别在于 不再有
// 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
来更正此代码。
答案 0 :(得分:2)
如果您将代码复制/粘贴到游乐场,编译器会抱怨:
$date = new \DateTime('@'.strtotime('now'));
编译器说明了所有内容:您必须将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
,因为默认情况下,Rust变量不可变。