移动值并重新分配新值应该受到 Rust 1.74 编译器的限制

问题描述 投票:0回答:1

我写了下面这行代码:

fn main() {

    let mut s = vec!["my".to_string(), "here".to_string(), "babe".to_string()];
    let t = s;
    s = vec!["three".to_string()];
    let u = s;

}

基于我对 rust 编译器行为和 rust 所有权规则的理解,在我将

s
值的所有权(它不是原始类型,并且不实现 COPY 特征,因为它是 Vec 类型)移至
t
在第2行中,我不应该能够更改
s
的值,因为这个变量(我的意思是
s
)不再有效!但这行代码完全有效。谁能解释一下为什么吗?

我希望通过运行此代码来面对编译器错误!

rust move ownership
1个回答
1
投票

你关于在some范围内无法

read
s的说法是正确的,因为
vec!["my", "here", "babe"]
(为了简化而省略了
to_string
)移入了
t
并且向量不是
Copy
。然而,在 Rust 中,如果你重新分配一些向量给它,你就可以再次读取(或写入)
s
(是的,它也可以移出到某个地方)。

从技术上讲,它与以下代码等效,并且工作正常:

    let mut s = vec!["my".to_string(), "here".to_string(), "babe".to_string()];
    let t = s;
    let s2 = vec!["three".to_string()];
    let u = s2;
© www.soinside.com 2019 - 2024. All rights reserved.