小编Tin*_*Lin的帖子

为什么添加类型注释可以消除借用错误?

当我遇到这个奇怪的案例时,我正在学习 Rust 以及所有参考资料和借用的东西:

fn main() {
    let mut n = 42u32;

    let ref1 = &mut n; 
    let ref2 = ref1;   // line 5
    
    ref2;
    ref1;              // line 8
}
Run Code Online (Sandbox Code Playgroud)

该代码片段无法编译,因为ref1它已移至第 5 行,并且不能在第 8 行中使用,据我所知。

但是当我向 ref2 添加类型注释(这似乎完全无关,并且根本不会影响任何内容,因为rust-analyzer报告的类型完全相同)时:

fn main() {
    let mut n = 42u32;

    let ref1 = &mut n;
    let ref2: &mut u32 = ref1;
    //      ++++++++++
    ref2;
    ref1;
}
Run Code Online (Sandbox Code Playgroud)

它突然编译了!(你可以在游乐场尝试一下)

到底是怎么回事?我目前使用的是 rustc 1.65.0,这是某种错误吗?或者我错过了什么?

我在编译器资源管理器中使用不同版本的 rustc 进行了尝试,似乎 1.36.0 是第一个成功编译第二个片段的版本。所以我检查了公告,注意到他们在该版本中引入了名为“非词汇生命周期”的东西,我不确定这是否相关,但我注意到 rustc 1.35.0 的错误消息是: …

reference rust type-annotation borrow-checker

6
推荐指数
0
解决办法
149
查看次数

标签 统计

borrow-checker ×1

reference ×1

rust ×1

type-annotation ×1