Closures con parámetros
Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 61 de 66.
Si bien los closures que no reciben parámetros son útiles, la mayoría de las veces querrás pasar datos a tus closures para hacerlos más flexibles y potentes. Agregar parámetros a los closures sigue el mismo patrón que aprendiste anteriormente, pero con valores dentro de las barras verticales.
Aquí tienes cómo definir un closure que acepta un parámetro:
let add_one = |x: i32| x + 1;Observa que el parámetro x va entre las barras verticales, al igual que los parámetros de una función. Luego puedes llamar a este closure pasando un valor:
let add_one = |x: i32| x + 1;
let result = add_one(5); // el resultado es 6Para los closures con múltiples parámetros, sepáralos con comas:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // el resultado es 12Desafío
FácilRecibirás dos entradas. La primera entrada es un número y la segunda entrada también es un número. Crea un closure que tome dos parámetros y calcule la potencia (el primer parámetro elevado al segundo parámetro). Almacena el closure en una variable, llámalo con los valores de entrada e imprime el resultado.
Requisitos:
- Lee la primera entrada (número base) y elimina los espacios en blanco
- Parsea la entrada a
i32 - Lee la segunda entrada (exponente) y elimina los espacios en blanco
- Parsea la entrada a
u32 - Crea un closure con dos parámetros que calcule la potencia utilizando el método
.pow() - Almacena el closure en una variable
- Llama al closure con ambos valores de entrada
- Imprime el resultado
Entrada:
- Primera línea: Un número base (por ejemplo,
2) - Segunda línea: Un exponente (por ejemplo,
3)
Salida:
- El resultado del cálculo de la potencia
Hoja de referencia
Los closures pueden aceptar parámetros colocándolos entre las barras verticales ||:
let add_one = |x: i32| x + 1;
let result = add_one(5); // el resultado es 6Para múltiples parámetros, sepárelos con comas:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // el resultado es 12Pruébalo tú mismo
use std::io;
fn main() {
// Leer la primera 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");
// Leer la segunda entrada (exponente)
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: Crear un cierre (closure) que calcule la potencia y almacenarlo en una variable
// TODO: Llamar al cierre con la base y el exponente
// Imprimir el resultado
println!("{}", result);
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Flujo de control avanzado
La expresión 'match'Coincidencia de múltiples valoresCoincidencia de rangosLa expresión 'if let'Bucles como expresionesResumen - Analizador de comandos simple4Agrupando datos con Structs
¿Qué es un Struct?Visión general de los StructsAcceso a los campos de un StructStructs mutablesStructs como parámetros de funcionesStructs de tuplaResumen - Crear un Struct de Libro7Manejo de errores con 'Result'
¿Qué es un 'Result'?Uso de 'match' con 'Result'is_ok() e is_err()Atajos: unwrap y expectEl operador de signo de interrogación '?'Parsing de Strings a númerosResumen - Función de división segura10Closures y funciones anónimas
¿Qué es un Closure?Definir un Closure simpleClosures con parámetrosCapturar el entornoResumen - Closure sumador simple2Introducción a los vectores
¿Qué es un vector?Crear un vectorAñadir elementos con pushAcceder a los elementos de un vectorIterar sobre un vectorIteración mutableEliminar elementosResumen: Rastreador de puntuación básico5Pares clave-valor con Hash Maps
¿Qué es un Hash Map?Crear un Hash MapInsertar pares clave-valorAcceder a los valoresIterar sobre un Hash MapActualizar un valorEliminar un parRepaso: Contador de palabras8Proyecto: Inventario simple de artículos
Configuración del proyectoAgregar un artículoVerificar el stockVender un artículoUniendo todo3Lista de tareas en la línea de comandos
Configuración del proyectoAñadir una tareaVer todas las tareasEliminar una tareaCódigo final