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
Experimente 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 FinalPratique por conta própria: Compilador de Rust online