String o str
Ahora podemos entender los dos tipos de cadenas de Rust:
fn main() { let s1: &str = "World"; println!("s1: {s1}"); let mut s2: String = String::from("Hello "); println!("s2: {s2}"); s2.push_str(s1); println!("s2: {s2}"); let s3: &str = &s2[6..]; println!("s3: {s3}"); }
Terminología de Rust:
&stres una referencia inmutable a un slice de una cadena.Stringes un búfer de cadena mutable.
- 
&strintroduce un slice de cadena, que es una referencia inmutable a los datos de cadena codificados en UTF-8 y almacenados en un bloque de memoria. Los literales de cadena ("Hello") se almacenan en el binario del programa. - 
El tipo
Stringde Rust es un envoltorio que rodea a un vector de bytes. Como sucede conVec<T>, tiene propiedad. - 
Al igual que ocurre con muchos otros tipos,
String::from()crea una cadena a partir de un literal de cadena.String::new()crea una cadena vacía a la que se pueden añadir los datos de la cadena mediante los métodospush()ypush_str(). - 
La macro
format!()es una forma práctica de generar una cadena propia a partir de valores dinámicos. Acepta la misma especificación de formato queprintln!(). - 
Puedes tomar prestados slices
&strdesdeStringmediante&y, si quieres, puedes seleccionar intervalos. - 
Para los programadores de C++: piensa en
&strcomo elconst char*de C++, pero el que siempre apunta a una cadena válida en la memoria.Stringde Rust es parecido astd::stringde C++ (la diferencia principal es que solo puede contener bytes codificados en UTF-8 y nunca utilizará una optimización de cadena pequeña).