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

Aha*_*bol 6 rust

在此代码中:

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

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

Cha*_*man 7

一句话简介:a是暂时的b,不是。

temp是一个变量;变量总是在封闭范围的末尾被删除。在我们将其分配给 之前,范围就结束了b

相反,vec![]ina是临时的,因为它没有分配给变量。临时对象通常会在语句末尾被删除,但是由于语句是一个let声明,因此其中的临时对象会受到临时生命周期扩展的影响,并且其生命周期会被扩展以匹配其自身的生命周期a,即直到 的封闭块为止a

请注意,准确地说,temp还为 分配了一个临时生命周期,该临时生命周期受到临时生命周期延长的影响 - 但其延长的生命周期与 的生命周期匹配temp因为它是其声明的一部分。