fn main() {
let mut data = Box::new(1);
{
data = 3;
let mut other_data = Box::new(2);
}
}
Quando este código é executado, other_data
será alocado por heap dentro do escopo e depois desalocado automaticamente quando sair. O mesmo vale para data
: será criado dentro do escopo do main()
função e descartada automaticamente quando main()
termina. Tudo isso é visível para o compilador no momento da compilação, portanto, erros envolvendo o escopo não compilam.
Propriedade da ferrugem
Rust acrescenta outra ideia -chave ao escopo e Rai: a noção de propriedade. Objetos só podem ter um proprietárioou referência ao vivo, de cada vez. Você pode mover a propriedade de um objeto entre variáveis, mas não pode se referir a um determinado objeto mutuamente em mais de um lugar de cada vez.
fn main() {
let a = Box::new(5);
let _b = a;
drop(a);
}
Neste exemplo, criamos o valor em a
com uma alocação de heap, depois atribua _b
para a
. Ao fazer isso, nós movido o valor fora de a
. Então, se tentarmos negociar manualmente o valor com drop()
recebemos um erro: use of moved value: `a
. Mudar a última linha para drop(_b)
porém, e está tudo bem. Nesse caso, estamos manipulando esse valor por meio de seu proprietário atual e válido.