ToString în Rust

Trait-ul metodei to_string(); există automat pentru orice tip cu Display, deci nu se implementează direct.

Sintaxă
pub trait ToString {
    fn to_string(&self) -> String;
}
// implementat automat pentru orice T: Display

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 {} în println!; implementează Display.
  • Folosești to_string() doar ca să concatenezi într-un text existent. write! sau format! 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ă.