Préstamos compartidos y únicos

Rust limita las formas en que se pueden tomar prestados valores:

  • Puedes tener uno o varios valores &T en un momento dado, o
  • puedes tener exactamente un valor &mut T.
fn main() {
    let mut a: i32 = 10;
    let b: &i32 = &a;

    {
        let c: &mut i32 = &mut a;
        *c = 20;
    }

    println!("a: {a}");
    println!("b: {b}");
}
  • El código anterior no se compila porque a se toma prestada como mutable (a través de c) y como inmutable (a través de b) al mismo tiempo.
  • Mueve la instrucción println! de b antes del ámbito que introduce c para que el código compile.
  • Después de ese cambio, el compilador se da cuenta de que b solo se usa antes del nuevo préstamo mutable de a a través de c. Se trata de una función del verificador de préstamos denominada “tiempo de vida no léxico”.