我有一个很大的结构体,例如Vec<i32>
。现在我的代码看起来像
fn main() {
let mut arr = vec![0, 1, 2];
// Lot of code pre
arr.push(5);
// Lot of code post
println!("{:?}", arr);
}
字符串
我想把它取出来这样看起来就像
fn main() {
let mut arr = vec![0, 1, 2];
my_push(arr, 5);
println!("{:?}", arr);
}
fn my_push(mut arr: Vec<i32>, x: i32) {
// Lot of code
arr.push(x);
// Lot of code
}
型
如何针对具体情况实施?我只需要把这件东西转换成单独的功能。我得到错误,因为arr被移动到my_push
,在那里它被销毁。
error[E0382]: borrow of moved value: `arr`
--> src/main.rs:4:22
|
2 | let mut arr = vec![0, 1, 2];
| ------- move occurs because `arr` has type `Vec<i32>`, which does not implement the `Copy` trait
3 | my_push(arr, 5);
| --- value moved here
4 | println!("{:?}", arr);
| ^^^ value borrowed here after move
型
1条答案
按热度按时间bq8i3lrv1#
你可以通过传入一个可变的引用来解决这个问题,因为现在你把它的所有权交给了函数,于是它就被丢弃了,再也不会出现了。
考虑这种变化:
字符串
请记住,Rust非常重视所有权。如果你习惯了像Python、JavaScript或Ruby这样的语言,在这些语言中,像这样传入数组总是作为一个隐式引用来完成的,那么在Rust中绝对不是这样。引用 * 必须 * 是显式的,如
&
或&mut
。