Ce face ToString
to_string() transformă o valoare în String folosind formatul ei Display: 42.to_string() dă "42", 'ș'.to_string() dă "ș". Biblioteca standard are o implementare generală impl<T: Display + ?Sized> ToString for T, deci orice tip cu Display primește metoda gratuit.
De aceea regula este: implementează Display, nu ToString. Primești astfel și to_string(), și {} în println!/format!. Rezultatul este același cu format!("{}", x).
Ce returnează
Un String nou.
Exemple
Exemplul 1: to_string pe tipuri din std
use std::net::Ipv4Addr;
fn main() {
let texte = [
2026.to_string(),
(-3.75).to_string(),
'ț'.to_string(),
false.to_string(),
Ipv4Addr::new(192, 168, 0, 1).to_string(),
];
println!("{texte:?}");
}
Rezultat
["2026", "-3.75", "ț", "false", "192.168.0.1"]
Exemplul 2: Display aduce to_string
use std::fmt;
struct Temperatura(f64);
impl fmt::Display for Temperatura {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:.1} °C", self.0)
}
}
fn main() {
let t = Temperatura(23.46);
let text: String = t.to_string();
println!("{text} ({} caractere)", text.chars().count());
println!("la fel ca format!: {}", text == format!("{t}"));
}
Rezultat
23.5 °C (7 caractere)
la fel ca format!: true
Greșeli frecvente
- Scrii
impl ToString for Tip. Funcționează, dar nu primești{}înprintln!; implementeazăDisplay. - Folosești
to_string()doar ca să concatenezi într-un text existent.write!sauformat!evită textele intermediare.
Comenzi înrudite
fmt::Display: Trait-ul pentru afișarea către utilizator cu {}; se implementează manual și aduce automat to_string().str::to_string: Copiază un &str într-un String nou, deținut. to_string și to_owned dau același rezultat.FromStr: Trait-ul care face un tip „citibil” din text; după implementare, „…”.parse::<Tip>() funcționează.