73 lines
1.2 KiB
Markdown
73 lines
1.2 KiB
Markdown
1.
|
|
```rust
|
|
fn main() {
|
|
let arr = [1, 2, 3];
|
|
let s1: &[i32] = &arr[0..2];
|
|
|
|
let s2: &str = "hello, world";
|
|
}
|
|
```
|
|
|
|
2.
|
|
```rust
|
|
fn main() {
|
|
let arr: [char; 3] = ['中', '国', '人'];
|
|
|
|
let slice = &arr[..2];
|
|
|
|
// TIPS: slice( reference ) IS NOT an array, if it is an array, then `assert!` will passed: each of the two UTF-8 chars '中' and '国' occupies 3 bytes, 2 * 3 = 6
|
|
assert!(std::mem::size_of_val(&slice) == 16);
|
|
}
|
|
```
|
|
|
|
3.
|
|
```rust
|
|
fn main() {
|
|
let arr: [i32; 5] = [1, 2, 3, 4, 5];
|
|
let slice: &[i32] = &arr[1..4];
|
|
assert_eq!(slice, &[2, 3, 4]);
|
|
}
|
|
```
|
|
|
|
4.
|
|
```rust
|
|
fn main() {
|
|
let s = String::from("hello");
|
|
|
|
let slice1 = &s[0..2];
|
|
let slice2 = &s[..2];
|
|
|
|
assert_eq!(slice1, slice2);
|
|
}
|
|
```
|
|
|
|
5.
|
|
```rust
|
|
fn main() {
|
|
let s = "你好,世界";
|
|
let slice = &s[0..3];
|
|
|
|
assert!(slice == "你");
|
|
}
|
|
```
|
|
|
|
6.
|
|
```rust
|
|
fn main() {
|
|
let mut s = String::from("hello world");
|
|
|
|
// here, &s is `&String` type, but `first_word` need a `&str` type.
|
|
// it works because `&String` can be implicitly converted to `&str, If you want know more ,this is called `Deref`
|
|
let word = first_word(&s);
|
|
|
|
println!("the first word is: {}", word);
|
|
|
|
s.clear();
|
|
|
|
}
|
|
fn first_word(s: &str) -> &str {
|
|
&s[..1]
|
|
}
|
|
```
|
|
|