РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
490 of 1245 menu

Класс Cell

Класс Cell из модуля std::cell позволяет изменять значение, хранящееся внутри структуры, даже если сама структура является неизменяемой. Это достигается за счёт внутренней изменяемости (interior mutability). Класс Cell работает только с типами, реализующими трейт Copy, либо с типами, которые можно заменить целиком. Основные методы: new для создания, get для чтения значения и set для установки нового значения.

Синтаксис

use std::cell::Cell; let cell = Cell::new(value); let value = cell.get(); cell.set(new_value);

Пример

Давайте создадим Cell с числом, прочитаем его и изменим:

use std::cell::Cell; fn main() { let cell = Cell::new(5); println!("{}", cell.get()); cell.set(10); println!("{}", cell.get()); }

Результат выполнения кода:

5 10

Пример

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

use std::cell::Cell; fn increment(cell: &Cell<i32>) { let current = cell.get(); cell.set(current + 1); } fn main() { let cell = Cell::new(1); increment(&cell); increment(&cell); println!("{}", cell.get()); }

Результат выполнения кода:

3

Пример

Давайте сохраним в Cell строковый срез и заменим его на другой:

use std::cell::Cell; fn main() { let cell = Cell::new("abcde"); println!("{}", cell.get()); cell.set("12345"); println!("{}", cell.get()); }

Результат выполнения кода:

"abcde" "12345"

Смотрите также

  • класс RefCell,
    который также обеспечивает внутреннюю изменяемость, но с проверкой заимствования во время выполнения
  • метод get,
    который возвращает копию значения из ячейки
  • метод set,
    который устанавливает новое значение в ячейку
  • концепция interior-mutability,
    которая описывает внутреннюю изменяемость в Rust
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить