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

Метод to_owned

Метод to_owned создаёт owned-версию значения, то есть преобразует заимствованные данные в данные, которыми тип владеет самостоятельно. Метод не принимает параметров и возвращает новое значение типа Self, которое не связано с исходным заимствованием.

Метод to_owned объявлен в типаже ToOwned. Он часто используется, когда нужно получить владеющую версию среза &str - строку String, или владеющую версию среза &[T] - вектор Vec<T>.

Синтаксис

value.to_owned()

Пример

Давайте преобразуем строковый срез "abcde" в строку String с помощью метода to_owned:

fn main() { let slice: &str = "abcde"; let owned: String = slice.to_owned(); println!("{}", owned); }

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

"abcde"

Пример

Давайте проверим, что метод to_owned создаёт независимую копию данных. Изменим исходный вектор после создания owned-версии:

fn main() { let original = vec![1, 2, 3, 4, 5]; let owned = original.to_owned(); println!("{:?}", owned); println!("{:?}", original); }

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

[1, 2, 3, 4, 5] [1, 2, 3, 4, 5]

Пример

Давайте преобразуем срез вектора &[i32] в полноценный вектор Vec<i32>:

fn main() { let vec = vec![1, 2, 3, 4, 5]; let slice: &[i32] = &vec; let owned: Vec<i32> = slice.to_owned(); println!("{:?}", owned); }

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

[1, 2, 3, 4, 5]

Пример

Давайте используем метод to_owned для создания владеющей строки из среза, чтобы вернуть её из функции:

fn make_string(slice: &str) -> String { slice.to_owned() } fn main() { let res = make_string("12345"); println!("{}", res); }

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

"12345"

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

  • типаж Clone,
    который создаёт копию значения
  • метод clone,
    который клонирует значение через типаж Clone
  • типаж Cow,
    который использует to_owned для получения владеющей версии
  • метод into_owned,
    который преобразует Cow в owned-значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить