trpl-zh-cn/listings/ch04-understanding-ownership/listing-04-09/src/main.rs

37 lines
1022 B
Rust
Raw Normal View History

2022-02-06 16:43:51 +08:00
// ANCHOR: here
fn first_word(s: &str) -> &str {
// ANCHOR_END: here
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i];
}
}
&s[..]
}
// ANCHOR: usage
fn main() {
let my_string = String::from("hello world");
2022-02-07 11:37:16 +08:00
// `first_word` 适用于 `String`(的 slice整体或全部
2022-02-06 16:43:51 +08:00
let word = first_word(&my_string[0..6]);
let word = first_word(&my_string[..]);
2022-02-07 11:37:16 +08:00
// `first_word` 也适用于 `String` 的引用,
2022-02-09 14:56:11 +08:00
// 这等价于整个 `String` 的 slice
2022-02-06 16:43:51 +08:00
let word = first_word(&my_string);
let my_string_literal = "hello world";
2022-02-07 11:37:16 +08:00
// `first_word` 适用于字符串字面值,整体或全部
2022-02-06 16:43:51 +08:00
let word = first_word(&my_string_literal[0..6]);
let word = first_word(&my_string_literal[..]);
2022-02-07 11:37:16 +08:00
// 因为字符串字面值已经 **是** 字符串 slice 了,
// 这也是适用的,无需 slice 语法!
2022-02-06 16:43:51 +08:00
let word = first_word(my_string_literal);
}
// ANCHOR_END: usage