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

Трейт Borrow

Трейт Borrow позволяет заимствовать значение типа как ссылку на другой тип. Он определяет метод borrow, который возвращает ссылку на заимствованное значение. Параметром метод не принимает, а возвращает ссылку на тип Borrowed, указанный в определении трейта. Трейт Borrow часто используется в коллекциях для поиска значений по ключу, который может быть представлен разными типами.

Синтаксис

trait Borrow<Borrowed> where Borrowed: ?Sized, { fn borrow(&self) -> &Borrowed; }

Пример

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

use std::borrow::Borrow; struct MyString { value: String, } impl Borrow<str> for MyString { fn borrow(&self) -> &str { &self.value } } fn main() { let s = MyString { value: String::from("abcde") }; let borrowed: &str = s.borrow(); println!("{}", borrowed); }

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

"abcde"

Пример

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

use std::collections::HashMap; fn main() { let mut map: HashMap<String, i32> = HashMap::new(); map.insert(String::from("key"), 42); let key: &str = "key"; let res = map.get(key); println!("{:?}", res); }

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

Some(42)

Пример

Давайте рассмотрим разницу между трейтами Borrow и AsRef на примере функции, принимающей обобщённый параметр:

use std::borrow::Borrow; fn print_borrowed<T: Borrow<str>>(value: T) { let borrowed: &str = value.borrow(); println!("{}", borrowed); } fn main() { let s = String::from("12345"); print_borrowed(s); let s2 = "abcde"; print_borrowed(s2); }

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

"12345" "abcde"

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

  • трейт AsRef,
    который предоставляет дешёвое преобразование по ссылке
  • трейт Deref,
    который позволяет разыменовывать значение как ссылку
  • трейт трейт,
    который описывает общее поведение типов
  • трейт trait bound,
    который ограничивает обобщённые типы трейтами
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить