为什么传递向量可以,但传递切片却不行?

Aha*_*bol 5 slice rust borrow-checker

当我写下这个:

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 给我错误的警告?

链接到工作示例

链接到不起作用的示例