"Cannot borrow `*arr` as immutable because it is also borrowed as mutable" 在函数调用中
"Cannot borrow `*arr` as immutable because it is also borrowed as mutable" in a function call
请有人解释下面的代码,它怎么会不安全,为什么 borrowchecker 在这里抱怨?我对 Rust 很陌生,我有一点 c/c++ 背景。
fn test(a: &mut [i32], place: usize) -> i32 {
a[place] /= 2;
return a[place];
}
fn main() {
let mut values = vec![1, 2, 3, 4];
let b = test(&mut values, values.len() / 2); // compiler gives error on values.len()
}
为什么首先使用 values.len()/2
分配一个变量并将其传递给函数?
出现这个问题是因为你试图在两个不同的参数位置对 values
做两件不同的事情,而当前的 Rust 实现不够智能,无法确定这个用例没有问题。
您可以通过以下方式解决此问题:
fn test(a: &mut [i32], place: usize) -> i32 {
a[place] /= 2;
return a[place];
}
fn main() {
let mut values = vec![1, 2, 3, 4];
let l = values.len() / 2;
let b = test(&mut values, l);
}
请有人解释下面的代码,它怎么会不安全,为什么 borrowchecker 在这里抱怨?我对 Rust 很陌生,我有一点 c/c++ 背景。
fn test(a: &mut [i32], place: usize) -> i32 {
a[place] /= 2;
return a[place];
}
fn main() {
let mut values = vec![1, 2, 3, 4];
let b = test(&mut values, values.len() / 2); // compiler gives error on values.len()
}
为什么首先使用 values.len()/2
分配一个变量并将其传递给函数?
出现这个问题是因为你试图在两个不同的参数位置对 values
做两件不同的事情,而当前的 Rust 实现不够智能,无法确定这个用例没有问题。
您可以通过以下方式解决此问题:
fn test(a: &mut [i32], place: usize) -> i32 {
a[place] /= 2;
return a[place];
}
fn main() {
let mut values = vec![1, 2, 3, 4];
let l = values.len() / 2;
let b = test(&mut values, l);
}