Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
На самом деле здесь лучше использовать метод to_owned(), поскольку метод to_string() для размещения строки в памяти использует довольно тяжёлую библиотеку форматирования текста, а to_owned() просто копирует строковый срез &str напрямую в новый объект String — прим. перев.То чувство, когда переводчик разбирается в предмете лучше автора.
to_string() определёт в трейте ToString, у которого есть blanket-реализация для всех Display-типов:impl<T: Display> ToString for T {
fn to_string(&self) -> String {
format!("{}", self)
}
}
String/&str также используется format!(), что неэффективно.ToString для str через String::from_str(). Без специализации сделать такую реализацию нельзя, потому что она будет конфликтовать с blanket-реализацией для T: Display.fn new(name: Into<String>)
name: Into<String>
не имеет смысла.Into::into() принимает self по значению, такие трейты не могут быть object-safe, следовательно, из них нельзя сделать трейт-объект.where Self: Sized. См. например типаж Iterator, который object-safe, но у него есть методы, принимающие self по значению doc.rust-lang.org/src/core/iter.rs.html#376.impl<F, T> Display for F<T> where F: Collection<T>, T: Display {...} // oops, compile error
Создание функции на Rust, которая принимает String или &str