Borrow no Loop
Parte da seção Fundamentals do Journey de Rust da Coddy — lição 67 de 75.
Quando escrevemos um loop em Rust, temos duas maneiras principais de trabalhar com nossos dados: podemos olhar para eles (usando &) ou pegá-los. Por exemplo, considere os seguintes dados:
let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;Método 1: Olhando para os dados (usando &):
for number in &numbers {
sum += number;
}
println!("I can use it here: {:?}", numbers);Método 2: Pegando os dados (sem &):
for number in numbers {
sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Isso causaria um erroPense nisso desta forma:
- Usar
&é como olhar para 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() {}É semelhante a isto:
for num in &numbers {}E um loop de mutação:
for num in numbers.iter_mut() {
*num *= 2;
}Também pode ser escrito desta forma:
for num in &mut numbers {
*num *= 2;
}Folha de consulta
Em loops no Rust, você pode observar os dados (usando &) ou assumir a propriedade (ownership) deles:
Observando os dados (empréstimo/borrowing):
let numbers = vec![1, 2, 3, 4, 5];
for number in &numbers {
sum += number;
}
// numbers ainda pode ser usado após o loopAssumindo a propriedade (ownership):
let numbers = vec![1, 2, 3, 4, 5];
for number in numbers {
sum += number;
}
// numbers não pode ser usado após o loopMétodos de iterador:
// Estes são equivalentes:
for num in numbers.iter() {}
for num in &numbers {}
// Para mutação:
for num in numbers.iter_mut() { *num *= 2; }
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 Fundamentals
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âmica