【问题标题】:Non-mut variables is mutable leading to crash非mut变量是可变的导致崩溃
【发布时间】:2021-03-17 14:09:19
【问题描述】:

我遇到了一个奇怪的案例,Rust 告诉我我不需要在变量上使用mut,即使我显然在改变它!经过一番摆弄后,我设法编译了以下代码,它看起来很糟糕。

fn main() {
    let x: u32;
    loop {
        match 1 {
            1 => {}
            _ => {
                x = 5;
                break;
            }
        }
    }
    dbg!(x);
}

运行它 (playground) 会导致某种崩溃。这里发生了什么?这是编译器错误吗?我每晚试了一下,还是超时。

【问题讨论】:

  • 这是一个无限循环,与x的初始化无关。
  • 无限循环掩盖了你真正的问题,我认为这是关于deferred initialization

标签: rust


【解决方案1】:

这也可以编译:

let x: u32;

if false {
    x = 5;
}

还有:

let x: u32;
x = 5;

正如@trentcl 提到的,这是延迟初始化,这就是它被接受的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2014-09-28
    • 2017-07-05
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多