Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Rust: closure, fn, fnmut, fnonce, borrowing

Какие типы замыканий существуют в Rust?

Этот вопрос позволяет разобраться, как замыкания работают с захваченными данными, и различия между их типами.

Короткий ответ

В Rust существуют три типа замыканий: Fn, FnOnce и FnMut. Они отличаются тем, как обрабатывают захваченные данные: Fn работает с неизменяемыми ссылками, FnMut — с изменяемыми, а FnOnce — с перемещением.

Длинный ответ

Замыкания в Rust — это анонимные функции, которые могут захватывать переменные из своего окружения. Тип замыкания зависит от способа работы с захваченными данными.

Типы замыканий:

  • Fn: Захватывает данные по неизменяемой ссылке. Может вызываться несколько раз.

  • FnMut: Захватывает данные по изменяемой ссылке. Может изменять их.

  • FnOnce: Захватывает данные по перемещению (move). Может быть вызвано только один раз.

Примеры:

let hello = "Hello".to_string();

// Fn
let print = || println!("{}", hello);
print();

// FnMut
let mut count = 0;
let mut increment = || count += 1;
increment();
println!("{}", count);

// FnOnce
let consume = || println!("{}", hello);
consume(); // После вызова переменная hello недоступна

Когда использовать:

  • Fn — для неизменяемых операций.

  • FnMut — для изменяемых данных.

  • FnOnce — когда данные нужно полностью передать замыканию.

Замыкания делают код компактным и выразительным, а их строгая типизация предотвращает неожиданные изменения данных.

  • Аватар

    Rust Guru

    Eduard Paul

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • Rust

    Rust

Ключевые слова

#closure

#fn

#fnmut

#fnonce

#borrowing

Подпишись на Rust Developer в телеграм

  • Аватар

    Rust Guru

    Eduard Paul

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.