每次赋值后 Rust 可变值会发生什么情况 [duplicate]

what happens to a rust mutable value after each assignment [duplicate]

提问人:KianFakheriAghdam 提问时间:2/5/2023 更新时间:2/5/2023 访问量:63

问:

下面是动态可变值的两个示例。

pub fn main() {
    let mut x = String::from("Hello");
    println!("{}", x);

    x = format!("{x}, world!");
    println!("{}", x);
}

所以正如你所看到的,我们有一个可变变量。 被 借用 & 变成一个新值,然后该值被赋值回 。xxformat!x

pub fn main() {
    let mut x = String::from("Hello, world!");
    println!("{}", x);

    x = String::from("Lorem, ipsum!");
    println!("{}", x);
}

我真正的问题是这段代码,其中赋值与其初始值无关。变量只能对单个值进行所有权,那么 Rust 如何跟踪 “Hello, world!” & “Lorem, ipsum!”?赋值后可变值究竟会发生什么?x

我的猜测是,它会检查分配给的值是否取决于第一个值,如果是,它不会删除它。

借用检查器 可变

评论

1赞 pigeonhands 2/5/2023
在这两种情况下,原始值都会被丢弃。的返回值不包含对其参数的引用,它会创建一个新的 .xformat!String
0赞 KianFakheriAghdam 2/5/2023
在借用而不是克隆的情况下会发生什么?
1赞 pigeonhands 2/5/2023
在参数被借用的情况下?它仍然构造一个不包含这些引用的新值。format!String
0赞 KianFakheriAghdam 2/5/2023
@pigeonhands 如果情况如何,它还会下降吗?x = takes_ownership_and_gives_back(x)
2赞 pigeonhands 2/5/2023
不,它不会被丢弃。当值不再具有所有者时,将删除它们。

答: 暂无答案