Заимствование 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,
который определяет время жизни ссылок