小编Aha*_*bol的帖子

为什么分配对变量的引用使我无法返回它

在此代码中:

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丢弃?

这仅仅是因为编译器可以理解第一个示例,但第二个示例很难理解吗?

rust

6
推荐指数
1
解决办法
158
查看次数

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

当我写下这个:

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

链接到工作示例

链接到不起作用的示例

slice rust borrow-checker

5
推荐指数
0
解决办法
198
查看次数

标签 统计

rust ×2

borrow-checker ×1

slice ×1