Borrow no Loop
Parte da seção Fundamentos do Journey de Rust da Coddy. Lição 67 de 75.
Em Rust, todo valor tem um proprietário, e, quando você usa um valor em um loop, o Rust precisa saber se você quer emprestá-lo (apenas dar uma olhada nele temporariamente) ou assumir sua propriedade (consumi-lo).
Isso é importante porque, se um loop assumir a propriedade dos seus dados, você não poderá mais usar esses dados depois que o loop terminar. Entender essa distinção é fundamental para escrever loops corretamente em Rust.
Por exemplo, considere os seguintes dados:
let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;Método 1: Observando os dados (usando &):
for number in &numbers {
sum += number;
}
println!("I can use it here: {:?}", numbers);Método 2: Movendo os dados (sem &):
for number in numbers {
sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Isso causaria um erroPense nisso assim:
- Usar
&é como olhar um álbum de fotos: você pode ver todas as fotos, mas o álbum permanece intacto - Não usar
&é como tirar as fotos: você pode usá-las, mas o álbum ficará vazio depois
Agora, este estilo:
for num in numbers.iter() {}É parecido com isto:
for num in &numbers {}E um loop de mutação, que precisa que o vetor seja declarado com mut:
let mut numbers = vec![1, 2, 3, 4, 5];
for num in numbers.iter_mut() {
*num *= 2;
}Também pode ser escrito desta forma:
for num in &mut numbers {
*num *= 2;
}Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores Parte 1
Operadores AritméticosOperador de MóduloAtalhos AritméticosOperadores de ComparaçãoComparação de Strings7Entrada e Saída Básica
Exibindo no ConsoleLendo a Entrada do UsuárioRevisão - Até 120Revisão - Verdadeiro ou Falso5Operadores Parte 2
Operadores Lógicos Parte 1Operadores Lógicos Parte 2Recapitulação - Lógica SimplesOperadores Lógicos Parte 33Variáveis Parte 2
Declaração de TipoConvenções de NomenclaturaInferência de TipoRecapitulação - Inicializar VariáveisConversão de Tipo9Laços
For sobre SériesLaço WhileBreakContinueLaços AninhadosRótulos de LoopLoop InfinitoRecapitulação - Entrada DinâmicaPratique por conta própria: Compilador de Rust online