to: непотребляющее преобразование
Префикс функции, которая принимает заимствованное значение и создаёт значение, владеющее данными.
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
impl str {
fn to_owned(&self) -> String;
fn to_uppercase(&self) -> String;
}
impl u32 {
// Берём `self` по значению, потому что `u32` реализует `Copy`
fn to_be(self) -> u32;
}
-
Методы, которые создают новое значение, владеющее данными, не потребляя
self, и подразумевают преобразование типа, называются с префиксомto. -
Методы, начинающиеся с «to», возвращают другой тип и сильно подразумевают нетривиальное преобразование типа или даже преобразование данных. Например,
str::to_uppercase. -
Методы «to» чаще всего принимают
&self. Однако они могут приниматьselfпо значению, если тип реализуетCopy: это также гарантирует, что вызов метода преобразования не потребляетself. -
Если нужно определить метод, который принимает
&selfи возвращает значение того же типа, владеющее данными, реализуйтеCloneилиToOwned. -
Если нужно определить метод, который потребляет исходное значение, используйте шаблон именования «into».
-
Также встречается в функциях, которые меняют порядок байтов примитивов, или копируют и показывают значение newtype.
Для дальнейшего изучения
-
Спросите класс: в чём разница между
to_ownedиinto_owned?Ответ:
to_ownedвстречается у значений-ссылок, таких как&str, аinto_owned— у значений, владеющих данными, которые содержат ссылочные типы, напримерCow(copy-on-write).Такие типы, как
Cow, могут владеть данными, содержащими заимствованные ссылки, поэтому значениеCow, владеющее данными, потребляется для создания значения, владеющего данными, ссылочного типа, которое он хранил.