在此代码中:
fn main() {
let a = {
&mut vec![1]
};
let b = {
let temp = &mut vec![1];
temp
};
println!("{a:?} {b:?}");
}
Run Code Online (Sandbox Code Playgroud)
为什么a有效和b无效(“借用时临时价值下降[E0716]”)?
如果它们都有问题,那对我来说就有意义了,为什么 vec 没有被a丢弃?
这仅仅是因为编译器可以理解第一个示例,但第二个示例很难理解吗?
当我写下这个:
fn add1(vc: &mut Vec<usize>) {
func1(vc, vc[0]);
}
fn func1(vc: &mut Vec<usize>, val: usize) {}
Run Code Online (Sandbox Code Playgroud)
Clippy 告诉我“写入&mut Vec而不是&mut [_]涉及一个切片可以做的新对象”。
但是,如果我将其切换为:
fn add1(vc: &mut Vec<usize>) {
func1(vc, vc[0]);
}
fn func1(vc: &mut [usize], val: usize) {}
Run Code Online (Sandbox Code Playgroud)
我得到“不能*vc作为不可变借用,因为它也作为可变借用 [E0502]”。
这是有道理的,但是为什么之前它会起作用呢?
另外,为什么 Clippy 给我错误的警告?