String::from în Rust

String Rust 1.0

Creează un String nou (deținut) din &str, char sau alt text, copiind conținutul pe heap.

Sintaxă
impl From<&str> for String
fn from(s: &str) -> String

Ce face String::from

String::from("Iași") copiază textul literal într-un String nou, pe care îl poți modifica și păstra. Funcționează prin trait-ul From, implementat pentru &str, char, &String, Box<str>, Cow<str> și altele.

Rezultatul este același cu "Iași".to_string(), "Iași".to_owned() sau "Iași".into() (când tipul țintă este cunoscut). Alege forma care se citește cel mai bine; între ele nu există diferență de viteză notabilă.

Parametri

Parametru Descriere
s Textul sursă: &str, char, &String etc. Se copiază; sursa rămâne neschimbată.

Ce returnează

Un String nou cu același conținut.

Exemple

Exemplul 1: Patru moduri de a obține același String

fn main() {
    let a = String::from("Brașov");
    let b = "Brașov".to_string();
    let c = "Brașov".to_owned();
    let d: String = "Brașov".into();

    println!("{a} {b} {c} {d}");
    println!("toate egale: {}", a == b && b == c && c == d);
}

Rezultat

Brașov Brașov Brașov Brașov
toate egale: true

Exemplul 2: Din char și din alt String

fn main() {
    let litera = String::from('ț');
    let original = String::from("Galați");
    let copie = String::from(&original);   // copiază, original rămâne valid

    println!("{litera} ({} octeți)", litera.len());
    println!("{original} / {copie}");
}

Rezultat

ț (2 octeți)
Galați / Galați

Greșeli frecvente

  • Crezi că let s: String = "Iași"; merge. Un literal are tipul &str; conversia în String trebuie cerută explicit cu String::from, to_string sau into.

Comenzi înrudite

  • String: Textul care îți aparține și se poate modifica: UTF-8, pe heap, crește singur. Diferența față de &str.
  • String::new: Creează un String gol, fără să aloce memorie; textul se adaugă apoi cu push_str sau push.
  • str::to_string: Copiază un &str într-un String nou, deținut. to_string și to_owned dau același rezultat.
  • From: Trait-ul pentru conversii care nu pot eșua: Tinta::from(x). Implementându-l, primești gratuit și x.into().