Slice
Outro tipo de dados em RUST que não possuí ‘ownership’ é o Slice.
Slice lhe da a liberdade de referenciar uma cadeia contínua de elementos em uma
coleção em vez de referenciar toda ela.
1
2
3
4
5
|
fn main() {
let s = String::String::from("Ola mundo");
let primeira_parte = &s[0..3]; // mesmo que [..3]
let segunda_parte = &s[4..9];
}
|
Um exemplo do uso de slice seria um problema onde gostaríamos de receber a
referencia para a primeira palavra encontrada em uma frase.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
fn main() {
let s = String::from("Qual seria a primeira palavra aqui?");
let primeira = primeira_palavra(&s);
println!("A primeira palavra eh {}", primeira);
}
fn primeira_palavra(s: &String) -> &str {
// Como precisamos interar sobre a String caracter por caracter precisamos
// transforma-la em um array de bytes
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i];
}
}
&s[..]
}
|
Slides não estão restrito somente a coleção de caracteres (strings) e podem ser
aplicados a arryas por exemplo.
1
2
3
4
|
fn main() {
let a = [1, 2, 3, 4, 5];
let slice = &a[1..3];
}
|