Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpFtFn 120 of 288 menu
◀ ▶

Много вызовов замыкания в Rust

Замыкание, которое не меняет захват, можно передать в функцию и вызвать снова. Параметр ограничивают трейтом, который допускает многократное обращение к одному и тому же замыканию.

Запишем функцию, которая принимает такое замыкание и число:

fn apply(f: impl Fn(i32) -> i32, n: i32) -> i32 { f(n) } fn main() { let add_one = |x| x + 1; let a = apply(add_one, 3); let b = apply(add_one, 7); println!("{} {}", a, b); }

Замыкание add_one не захватывает имена снаружи, поэтому его спокойно передают в apply дважды. Функция apply не знает тело замыкания: ей достаточно, что параметр подходит под трейт с повторными вызовами.

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

fn apply(f: impl Fn(i32) -> i32, n: i32) -> i32 { f(n) } fn main() { let base = 10; let add_base = |x| x + base; let first = apply(add_base, 2); let second = apply(add_base, 5); println!("{} {}", first, second); }

Дано число:

let start: i32 = 4;

Запишите замыкание, которое прибавляет start к аргументу, передайте его в функцию с двумя параметрами из урока и выведите два разных результата.

Дано число:

let n: i32 = 9;

Сделайте замыкание, которое удваивает аргумент, дважды передайте его в общую функцию с числом n и выведите оба ответа.

Скажите, почему одно и то же замыкание из первого примера можно передать в функцию два раза подряд.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить