Closures com Parâmetros
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 61 de 66.
Embora closures que não recebem parâmetros sejam úteis, na maioria das vezes você desejará passar dados para suas closures para torná-las mais flexíveis e poderosas. Adicionar parâmetros a closures segue o mesmo padrão que você aprendeu anteriormente, mas com valores dentro das barras verticais.
Veja como você define uma closure que aceita um parâmetro:
let add_one = |x: i32| x + 1;Observe que o parâmetro x fica entre as barras verticais, assim como os parâmetros de função. Você pode então chamar essa closure passando um valor:
let add_one = |x: i32| x + 1;
let result = add_one(5); // o resultado é 6Para closures com múltiplos parâmetros, separe-os com vírgulas:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // o resultado é 12Desafio
FácilVocê receberá duas entradas. A primeira entrada é um número, e a segunda entrada também é um número. Crie uma closure que receba dois parâmetros e calcule a potência (o primeiro parâmetro elevado ao segundo parâmetro). Armazene a closure em uma variável, chame-a com os valores de entrada e imprima o resultado.
Requisitos:
- Leia a primeira entrada (número base) e remova os espaços em branco
- Converta-a para
i32 - Leia a segunda entrada (expoente) e remova os espaços em branco
- Converta-a para
u32 - Crie uma closure com dois parâmetros que calcule a potência usando o método
.pow() - Armazene a closure em uma variável
- Chame a closure com ambos os valores de entrada
- Imprima o resultado
Entrada:
- Primeira linha: Um número base (ex:
2) - Segunda linha: Um expoente (ex:
3)
Saída:
- O resultado do cálculo da potência
Folha de consulta
As closures podem aceitar parâmetros colocando-os entre as barras verticais ||:
let add_one = |x: i32| x + 1;
let result = add_one(5); // result is 6Para múltiplos parâmetros, separe-os com vírgulas:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result is 12Experimente você mesmo
use std::io;
fn main() {
// Ler a primeira entrada (número base)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// Ler a segunda entrada (expoente)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: Criar uma closure que calcula a potência e armazená-la em uma variável
// TODO: Chamar a closure com base e expoente
// Imprimir o resultado
println!("{}", result);
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Fluxo de Controle Avançado
A Expressão 'match'Correspondência de Múltiplos ValoresCorrespondência de IntervalosA Expressão 'if let'Loops como ExpressõesRecapitulação - Parser de Comandos Simples4Agrupando Dados com Structs
O que é uma Struct?Visão Geral de StructsAcessando Campos de uma StructStructs MutáveisStructs como Parâmetros de FunçãoTuple StructsRecapitulação - Criando uma Struct Book7Tratando Erros com 'Result'
O que é um 'Result'?Usando 'match' com 'Result'is_ok() e is_err()Atalhos: unwrap e expectO Operador de Interrogação '?'Parsing de Strings para NúmerosRecapitulação - Função de Divisão Segura10Closures & Funções Anônimas
O que é uma Closure?Definindo uma Closure SimplesClosures com ParâmetrosCapturando o AmbienteRecapitulação - Closure de Soma Simples2Introdução a Vetores
O que é um Vetor?Criando um VetorAdicionando Elementos com pushAcessando Elementos do VetorIterando sobre um VetorIteração MutávelRemovendo ElementosRecapitulação - Rastreador de Pontuação Básico5Pares Chave-Valor com Hash Maps
O que é um Hash Map?Criando um Hash MapInserindo Pares Chave-ValorAcessando ValoresIterando sobre um Hash MapAtualizando um ValorRemovendo um ParRecapitulação - Contador de Palavras8Projeto: Inventário Simples de Itens
Configuração do ProjetoAdicionando um ItemVerificando o EstoqueVendendo um ItemJuntando tudo3Lista de Tarefas via Linha de Comando
Configuração do ProjetoAdicionando uma TarefaVisualizando Todas as TarefasRemovendo uma TarefaCódigo Final