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

Метод as_ref

Метод as_ref преобразует значение в ссылку на другой тип. Он особенно полезен, когда нужно получить ссылку на внутренние данные без перемещения или копирования значения. Метод возвращает ссылку на целевой тип, а параметров не принимает.

Метод as_ref доступен через типаж AsRef и часто используется для написания обобщённого кода, который принимает как владеющие значения, так и ссылки на них.

Синтаксис

value.as_ref()

Метод возвращает ссылку &T, где T - целевой тип, указанный в реализации типажа AsRef.

Пример

Давайте получим ссылку на строку из типа String с помощью метода as_ref:

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

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

"abcde"

Пример

Давайте получим ссылку на срез из вектора чисел с помощью метода as_ref:

fn main() { let v = vec![1, 2, 3, 4, 5]; let r: &[i32] = v.as_ref(); println!("{:?}", r); }

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

[1, 2, 3, 4, 5]

Пример

Давайте напишем функцию, которая принимает обобщённый параметр AsRef<str> и работает как со String, так и с &str:

fn print_len<S: AsRef<str>>(s: S) { println!("{}", s.as_ref().len()); } fn main() { let owned = String::from("abcde"); print_len(owned); print_len("12345"); }

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

5 5

Пример

Давайте используем метод as_ref для преобразования Box<str> в &str:

fn main() { let boxed: Box<str> = "abcde".into(); let r: &str = boxed.as_ref(); println!("{}", r); }

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

"abcde"

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

  • метод as_mut,
    который приводит значение к изменяемой ссылке
  • метод into,
    который преобразует значение в другой тип с передачей владения
  • метод to_string,
    который преобразует значение в строку
  • метод as_str,
    который возвращает строковый срез из строки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить