Menu
Coddy logo textTech

Замыкания с параметрами

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 61 из 66.

Хотя замыкания, не принимающие параметров, полезны, в большинстве случаев вы захотите передавать данные в свои замыкания, чтобы сделать их более гибкими и мощными. Добавление параметров в замыкания следует тому же шаблону, который вы изучили ранее, но со значениями внутри вертикальных черт.

Вот как определяется замыкание, принимающее один параметр:

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

Обратите внимание, что параметр x располагается между вертикальными чертами, точно так же, как параметры функции. Затем вы можете вызвать это замыкание, передав значение:

let add_one = |x: i32| x + 1;
let result = add_one(5); // результат равен 6

Для замыканий с несколькими параметрами разделяйте их запятыми:

let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // результат равен 12
challenge icon

Задание

Легко

Вы получите два входных значения. Первое число — это основание, а второе — показатель степени. Создайте замыкание, которое принимает два параметра и вычисляет степень (первый параметр, возведенный в степень второго параметра). Сохраните замыкание в переменной, вызовите его с входными значениями и выведите результат.

Требования:

  • Прочитайте первое входное значение (основание) и удалите лишние пробелы
  • Преобразуйте его в тип i32
  • Прочитайте второе входное значение (показатель степени) и удалите лишние пробелы
  • Преобразуйте его в тип u32
  • Создайте замыкание с двумя параметрами, которое вычисляет степень, используя метод .pow()
  • Сохраните замыкание в переменной
  • Вызовите замыкание с обоими входными значениями
  • Выведите результат

Ввод:

  • Первая строка: Число-основание (например, 2)
  • Вторая строка: Число-показатель степени (например, 3)

Вывод:

  • Результат вычисления степени

Шпаргалка

Замыкания могут принимать параметры, если поместить их между вертикальными чертами ||:

let add_one = |x: i32| x + 1;
let result = add_one(5); // результат равен 6

Для нескольких параметров разделяйте их запятыми:

let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // результат равен 12

Попробуйте сами

use std::io;

fn main() {
    // Считать первый ввод (основание степени)
    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");
    
    // Считать второй ввод (показатель степени)
    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: Создать замыкание, которое вычисляет степень, и сохранить его в переменной
    // TODO: Вызвать замыкание с основанием и показателем степени
    
    // Вывести результат
    println!("{}", result);
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow