Referencias colgantes
Ahora podemos entender los dos tipos de cadenas de Rust: &str
es muy parecida a &[char]
, pero almacena sus datos en una codificación de longitud variable (UTF-8).
fn main() { let s1: &str = "mundo"; println!("s1: {s1}"); let mut s2: String = String::from("¡Hola "); println!("s2: {s2}"); s2.push_str(s1); println!("s2: {s2}"); let s3: &str = &s2[6..]; println!("s3: {s3}"); }
Terminología de Rust:
&str
es una referencia inmutable a un slice de una cadena.String
es un búfer de cadena mutable.
-
&str
introduces a string slice, which is an immutable reference to UTF-8 encoded string data stored in a block of memory. String literals (”Hello”
), are stored in the program’s binary. -
El tipo
String
de Rust es un envoltorio que rodea a un vector de bytes. Como sucede conVec<T>
, tiene propiedad. -
As with many other types
String::from()
creates a string from a string literal;String::new()
creates a new empty string, to which string data can be added using thepush()
andpush_str()
methods. -
The
format!()
macro is a convenient way to generate an owned string from dynamic values. It accepts the same format specification asprintln!()
. -
Puedes tomar prestados slices
&str
deString
a través de&
y, de forma opcional, la selección de intervalos. Si seleccionas un intervalo de bytes que no esté alineado con los límites de caracteres, la expresión activará un pánico. El iteradorchars
itera sobre los caracteres y se aconseja esta opción a intentar definir los límites de los caracteres correctamente. -
For C++ programmers: think of
&str
asstd::string_view
from C++, but the one that always points to a valid string in memory. RustString
is a rough equivalent ofstd::string
from C++ (main difference: it can only contain UTF-8 encoded bytes and will never use a small-string optimization). -
Byte strings literals allow you to create a
&[u8]
value directly:fn main() { println!("{:?}", b"abc"); println!("{:?}", &[97, 98, 99]); }