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.
