mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-09 00:43:59 +08:00
把函数签名改成声明,更符合语境。
This commit is contained in:
parent
69d04458b1
commit
9bc6b8a9bd
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
这里有一个小的编程问题:编写一个获取一个字符串并返回它在其中找到的第一个单词的函数。如果函数没有在字符串中找到一个空格,就意味着整个字符串是一个单词,所以整个字符串都应返回。
|
这里有一个小的编程问题:编写一个获取一个字符串并返回它在其中找到的第一个单词的函数。如果函数没有在字符串中找到一个空格,就意味着整个字符串是一个单词,所以整个字符串都应返回。
|
||||||
|
|
||||||
让我们考虑一下这个函数的签名:
|
让我们考虑一下这个函数的声明:
|
||||||
|
|
||||||
```rust,ignore
|
```rust,ignore
|
||||||
fn first_word(s: &String) -> ?
|
fn first_word(s: &String) -> ?
|
||||||
@ -93,7 +93,7 @@ fn main() {
|
|||||||
|
|
||||||
这个程序编译时没有任何错误,而且在调用 `s.clear()` 之后使用 `word` 也不会出错。这时 `word` 与 `s` 状态就完全没有联系了,所以 `word `仍然包含值 `5`。可以尝试用值 `5` 来提取变量 `s` 的第一个单词,不过这是有 bug 的,因为在我们将 `5` 保存到 `word` 之后 `s` 的内容已经改变。
|
这个程序编译时没有任何错误,而且在调用 `s.clear()` 之后使用 `word` 也不会出错。这时 `word` 与 `s` 状态就完全没有联系了,所以 `word `仍然包含值 `5`。可以尝试用值 `5` 来提取变量 `s` 的第一个单词,不过这是有 bug 的,因为在我们将 `5` 保存到 `word` 之后 `s` 的内容已经改变。
|
||||||
|
|
||||||
我们不得不时刻担心 `word` 的索引与 `s` 中的数据不再同步,这是冗余且容易出错的!如果编写这么一个 `second_word` 函数的话,管理索引这件事将更加容易出问题。它的签名看起来像这样:
|
我们不得不时刻担心 `word` 的索引与 `s` 中的数据不再同步,这是冗余且容易出错的!如果编写这么一个 `second_word` 函数的话,管理索引这件事将更加容易出问题。它的声明看起来像这样:
|
||||||
|
|
||||||
```rust,ignore
|
```rust,ignore
|
||||||
fn second_word(s: &String) -> (usize, usize) {
|
fn second_word(s: &String) -> (usize, usize) {
|
||||||
|
Loading…
Reference in New Issue
Block a user