Метод as_ref
Метод as_ref преобразует тип
Option<T> в Option<&T>,
создавая ссылку на значение внутри Some,
не забирая владение. Метод не принимает параметров
и возвращает новый Option, содержащий
ссылку на исходное значение, если оно есть,
либо None в противном случае.
Этот метод особенно полезен, когда нужно
использовать значение по ссылке, сохранив
исходный Option доступным для
дальнейшего использования.
Синтаксис
option.as_ref()
Пример
Давайте создадим Option с числом
и получим ссылку на него с помощью метода
as_ref:
fn main()
{
let opt = Some(12345);
let ref_opt = opt.as_ref();
println!("{:?}", ref_opt);
println!("{:?}", opt);
}
Результат выполнения кода:
Some(12345)
Some(12345)
Как видно из примера, исходный Option
остался доступным после вызова as_ref.
Пример
Давайте рассмотрим работу метода as_ref
с None:
fn main()
{
let opt: Option<i32> = None;
let ref_opt = opt.as_ref();
println!("{:?}", ref_opt);
}
Результат выполнения кода:
None
Пример
Давайте используем as_ref для передачи
ссылки на значение в функцию без перемещения
владения:
fn print_length(s: Option<&String>)
{
match s
{
Some(val) => println!("Length: {}", val.len()),
None => println!("None"),
}
}
fn main()
{
let opt = Some(String::from("abcde"));
print_length(opt.as_ref());
println!("{:?}", opt);
}
Результат выполнения кода:
Length: 5
Some("abcde")