代码之家  ›  专栏  ›  技术社区  ›  Mandroid

编译时与运行时的借用错误

  •  0
  • Mandroid  · 技术社区  · 1 年前

    我有这个:

    let mut a = 6; //1
    let b = &a; //2
    let c = &mut a; //3
    println!("{b}") //4
    

    关于rust-ownerip和借用规则,我知道在编译过程中,如果有多个借用,其中一个涉及可变性,则会标记错误。

    在上面的代码中,在第3行,在第2行的不可变借用之后有一个可变借用,所以根据rust规则,这是不允许的。

    我在几个IDE中有这段代码,比如vsc、rustrover等。这些IDE标记任何编译错误,比如缺少“;”。

    但是第3行的错误是在我运行程序(货物运行)时检测到的,但不是编译错误。

    这不应该是一个编译错误吗?

    1 回复  |  直到 1 年前
        1
  •  2
  •   cafce25    1 年前

    您可以使用编译程序 cargo build 这在很大程度上造成了一个错误。 rust-analyzer 和其他工具并不总是检测到 全部的 编译器错误,尤其是借用检查器的运行成本很高,因此出于性能原因,可能不会在对代码进行的每一次微小更改时都运行。

    这些IDE标志 任何 编译错误

    是你的误解。

    推荐文章