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

Заимствование borrowing

Заимствование (borrowing) - это механизм в Rust, который позволяет временно использовать значение, не передавая право собственности (ownership) на него. Заимствование создаётся с помощью оператора &, который возвращает ссылку на значение. Параметром заимствования выступает переменная или значение, на которое нужно получить ссылку.

В Rust существует два вида заимствования: неизменяемое (immutable borrowing) и изменяемое (mutable borrowing). Неизменяемое заимствование создаётся через &, изменяемое - через &mut. При этом одновременно может существовать либо много неизменяемых ссылок, либо только одна изменяемая ссылка.

Синтаксис

&value // immutable borrow &mut value // mutable borrow

Пример

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

fn main() { let s = String::from("abcde"); let r = &s; println!("{}", r.len()); }

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

5

Пример

Давайте создадим изменяемое заимствование строки и добавим в неё текст:

fn main() { let mut s = String::from("abcde"); let r = &mut s; r.push_str("12345"); println!("{}", s); }

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

"abcde12345"

Пример

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

fn len_of(s: &String) -> usize { s.len() } fn main() { let s = String::from("abcde"); let res = len_of(&s); println!("{}", res); println!("{}", s); }

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

5 "abcde"

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

  • механизм ownership,
    который определяет правила владения значениями
  • оператор mut-borrow,
    который создаёт изменяемое заимствование
  • правила borrow-rules,
    которые регулируют одновременные заимствования
  • механизм lifetime,
    который определяет время жизни ссылок
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить