Неизменяемое заимствование &
Оператор & создает неизменяемую ссылку на значение.
Этот механизм называется заимствованием, потому что
вы не становитесь владельцем данных, а лишь временно
получаете к ним доступ. Параметром выступает переменная
или значение, на которое нужно создать ссылку.
При этом оригинальный владелец сохраняет свои права,
и данные остаются в памяти до тех пор, пока жива ссылка.
Синтаксис
&value
&mut value // для изменяемого заимствования
Пример
Давайте создадим неизменяемую ссылку на строку и выведем её значение:
fn main()
{
let s = "abcde";
let ref_s = &s;
println!("{}", ref_s);
}
Результат выполнения кода:
"abcde"
Пример
Давайте передадим неизменяемую ссылку в функцию, чтобы избежать перемещения владения:
fn print_length(s: &String)
{
println!("Length: {}", s.len());
}
fn main()
{
let s = String::from("12345");
print_length(&s);
println!("Owner still has: {}", s);
}
Результат выполнения кода:
Length: 5
Owner still has: 12345
Пример
Давайте создадим несколько неизменяемых ссылок на одни и те же данные:
fn main()
{
let s = String::from("abcde");
let ref1 = &s;
let ref2 = &s;
println!("{} {}", ref1, ref2);
}
Результат выполнения кода:
abcde abcde
Смотрите также
-
механизм
borrowing,
который лежит в основе заимствования -
оператор
&mut,
который создает изменяемое заимствование -
правила
заимствования,
которые регулируют количество ссылок -
концепция
владения,
которая тесно связана с заимствованием