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

Метод borrow

Метод borrow класса RefCell возвращает умный указатель Ref<T>, который предоставляет неизменяемый доступ к данным, хранящимся внутри RefCell. В отличие от обычных ссылок, проверка правил заимствования происходит не на этапе компиляции, а во время выполнения программы. Метод не принимает параметров. Если на момент вызова уже существует изменяемое заимствование borrow_mut, программа завершится паникой.

Синтаксис

refcell.borrow()

Пример

Давайте создадим RefCell с числом 5 и получим неизменяемую ссылку через метод borrow:

use std::cell::RefCell; fn main() { let cell = RefCell::new(5); let value = cell.borrow(); println!("{}", *value); }

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

5

Пример

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

use std::cell::RefCell; fn main() { let cell = RefCell::new(10); let value1 = cell.borrow(); let value2 = cell.borrow(); println!("{} {}", *value1, *value2); }

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

10 10

Пример

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

use std::cell::RefCell; fn main() { let cell = RefCell::new(10); let mut mut_ref = cell.borrow_mut(); *mut_ref = 20; let value = cell.borrow(); println!("{}", *value); }

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

thread 'main' panicked at 'already mutably borrowed: BorrowError'

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

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