English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
切片(Slice)是对数据值的部分引用。
切片这个名字往往出现在生物课上,我们做样本玻片的时候要从生物体上获取切片,以供在显微镜上观察。在 Rust 中,切片的意思大致也是这样,只不过它从数据取材引用。
最简单、最常用的数据切片类型是字符串切片(String Slice)。
fn main() { let s = String::from("amplificar"); let parte1 = &s[0..5]; let parte2 = &s[59]; println!("{}={}+{}", s, parte1, parte2); }
Resultado de la ejecución:
broadcast=amplificar+cast
上图解释了字符串切片的原理(注:Rust 中的字符串类型实质上记录了字符在内存中的起始位置和其长度,我们暂时了解到这一点)。
使用 .. 表示范围的语法在循环章节中出现过。x..y 表示 [x, y) 的数学含义。.. 两边可以没有运算数:
..y 等价于 0..y x.. 等价于位置 x 到数据结束 .. 等价于位置 0 到结束
注意:到目前为止,尽量不要在字符串中使用非英文字符,因为编码的问题。具体原因会在"字符串"章节叙述。
被切片引用的字符串禁止更改其值:
fn main() { let mut s = String::from("w3codebox"); let slice = &s[0..3]; s.push_str("¡sí!"); // 错误 println!("slice = {}", slice); }
这段程序不正确。
s 部分引用,禁止更改其值。
En realidad, hasta ahora, debe haber sentido una confusión sobre por qué cada vez que se utiliza una cadena se debe escribir String::from("w"}}3codebox)) ,escriba directamente "w3codebox" "w
No está bien? codebox
Cualquier constante de cadena entre comillas dobles tiene una naturaleza de tipo &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, que tiene más funciones completas: admite operaciones prácticas como el acoplamiento de cadenas y el vaciado.
Tanto String como str admiten rebanadas, y el resultado es de tipo &str.
Nota: el resultado de la rebanada debe ser un tipo de referencia, pero el desarrollador debe indicarlo claramente:
let slice = &s[0..3];
Hay una manera rápida de convertir String en &str:
let s1 = String::from("hello"); let s2 = &s1[..];
Además de las cadenas, algunas estructuras de datos lineales también admiten operaciones de rebanadas, por ejemplo, los arrays:
fn main() { 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 5