Tipo Rust Slice (segmento)
Un segmento (slice) es una referencia parcial a un valor de datos.
El nombre "slice" aparece a menudo en las clases de biología; al preparar muestras en un portaobjetos, se obtienen cortes de un organismo para observarlos bajo el microscopio. En Rust, el significado de slice es más o menos el mismo, solo que toma referencias de los datos.
Segmento de cadena
El tipo de segmento de datos más simple y más utilizado es el segmento de cadena (String Slice).
Ejemplo
let s = String::from("broadcast");
let part1 = &s[0..5];
let part2 = &s[5..9];
println!("{}={}+{}", s, part1, part2);
}
Resultado de la ejecución:
broadcast=broad+cast

La figura anterior explica el principio del segmento de cadena (nota: el tipo de cadena en Rust esencialmente registra la posición inicial de los caracteres en memoria y su longitud; por ahora solo necesitamos saber esto).
Uso..La sintaxis para representar rangos ya apareció en el capítulo de bucles.x..yrepresenta[x, y)el significado matemático de...Ambos lados pueden no tener operandos:
..y 等价于 0..y x.. 等价于位置 x 到数据结束 .. 等价于位置 0 到结束
Nota:Hasta ahora, intenta no usar caracteres no ingleses en las cadenas, debido a problemas de codificación. La razón específica se explicará en el capítulo "Cadena".
La cadena referenciada por el segmento no puede modificar su valor:
Ejemplo
let mut s = String::from("ejemplo");
let slice = &s[0..3];
s.push_str("yes!"); // Error
println!("slice = {}", slice);
}
Este programa es incorrecto.
s está referenciado parcialmente, está prohibido cambiar su valor.
De hecho, hasta ahora seguramente te habrás preguntado por qué cada vez que se usa una cadena hay que escribir asíString::from("ejemplo"), y escribir directamente"ejemplo"¿no es posible?
Llegados a este punto, debemos distinguir la diferencia entre estos dos conceptos. En Rust hay dos tipos de cadena comunes: str y String. str es el tipo del lenguaje central de Rust, es el segmento de cadena (String Slice) del que hemos hablado en este capítulo, y suele aparecer en forma de referencia (&str).
El tipo de toda constante de cadena encerrada entre comillas dobles es&str:
let s = "hello";
Aquí, s es una variable de tipo &str.
El tipo String es un tipo de datos proporcionado por la biblioteca pública estándar de Rust; sus funciones son más completas: admite operaciones útiles como añadir a la cadena, vaciarla, etc. Además de tener una propiedad de posición inicial de caracteres y una propiedad de longitud de cadena, tanto String como str tienen una propiedad de capacidad (capacity).
Tanto String como str admiten segmentos; el resultado de un segmento es un dato de tipo &str.
Nota: el resultado de un segmento debe ser un tipo de referencia, pero el desarrollador debe indicarlo explícitamente:
let slice = &s[0..3];
Hay una manera rápida de convertir String a &str:
let s1 = String::from("hello");
let s2 = &s1[..];
Segmento de no cadena
Además de las cadenas, otras estructuras de datos lineales también admiten operaciones de segmento, por ejemplo, los arrays:
Ejemplo
let arr = [1, 3, 5, 7, 9];
let part = &arr[0..3];
for i in part.iter() {
println!("{}", i);
}
}
Resultado de la ejecución:
1 3 5Otras extensiones