Menu
Coddy logo textTech

Closures con parámetros

Parte de la sección Lógica y Flujo 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.

Así es como defines un cierre que acepta un parámetro:

let add_one = |x: i32| x + 1;

Observa que el parámetro x va entre las barras verticales, igual que los parámetros de una función. Después puedes llamar a este cierre pasando un valor:

let add_one = |x: i32| x + 1;
let result = add_one(5); // el resultado es 6

Para 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 12
challenge icon

Desafío

Fácil

Recibirás dos entradas. La primera entrada es un número y la segunda entrada también es un número. Crea un cierre que acepte dos parámetros y calcule la potencia (el primer parámetro elevado al segundo parámetro). Almacena el cierre 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
  • Analízala como i32
  • Lee la segunda entrada (exponente) y elimina los espacios en blanco
  • Analízala como u32
  • Crea un cierre con dos parámetros que calcule la potencia usando el método .pow()
  • Almacena el cierre en una variable
  • Llama al cierre 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

Prué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);
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Rust online