Rust · Avançado · Inglês · Técnico
two-phase borrow
Mecanismo em que um empréstimo &mut começa reservado e só se torna exclusivo no uso real, permitindo ler o mesmo valor nos argumentos da chamada.
Onde usar
É por isso que v.push(v.len()) compila. Explica por que algumas chamadas aninhadas funcionam e outras equivalentes, com variável intermediária, falham.
Em código
let mut v = vec![1, 2];
v.push(v.len()); // duas fases
println!("{:?}", v);Exemplos
Two-phase borrows let v.push(v.len()) compile.
Os two-phase borrows deixam v.push(v.len()) compilar.
That only works thanks to two-phase borrows.
Isso só funciona graças aos two-phase borrows.
Cuidado
É uma exceção estreita: dentro do argumento só se pode ler o valor, e qualquer tentativa de alterá-lo continua sendo erro.