Empréstimos Compartilhados e Únicos
O Rust coloca restrições nas formas como você pode emprestar valores:
- Você pode ter um ou mais valores
&T
a qualquer momento, ou - Você pode ter exatamente um 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}"); }
- O código acima não compila porque
a
é emprestado como mutável (através dec
) e como imutável (através deb
) ao mesmo tempo. - Mova a instrução
println!
parab
antes do escopo que introduzc
para fazer o código compilar. - Após essa alteração, o compilador percebe que
b
só é usado antes do novo empréstimo mutável dea
através dec
. Este é um recurso do verificador de empréstimo (borrow checker) chamado “tempos de vida não lexicais”.