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 dec
) y como inmutable (a través deb
) al mismo tiempo. - Mueve la instrucción
println!
deb
antes del ámbito que introducec
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 dea
a través dec
. Se trata de una función del verificador de préstamos denominada “tiempo de vida no léxico”.