Refining Ch02.

This commit is contained in:
Penn Hiln 2023-12-07 14:26:42 +08:00
parent 28d531e05e
commit 37458bb4a3

View File

@ -596,12 +596,12 @@ let guess: u32 = guess.trim().parse().expect("请输入一个数字!");
[字符串上的 `parse` 方法](https://doc.rust-lang.org/std/primitive.str.html#method.parse),可将字符串转换为另一类型。在这里,我们要用他,将字符串转换为数字。我们需要使用 `let guess: u32`,告诉 Rust 我们想要的确切数字类型。`guess` 后面的冒号(`:`),告诉 Rust 我们将注解这个变量的类型。Rust 有几种内置的数字类型;这里所看到的 `u32`,是一种无符号的 32 位整数。对于小的正数来说,这是一种不错的默认选择。咱们将在 [第 3 章](https://doc.rust-lang.org/book/ch03-02-data-types.html#integer-types),了解其他数字类型。
`parse` 这个方法,只适用于逻辑上可以转换成数字的那些字符,因此很容易出错。例如,如果字符串包含着 `A👍%`,就无法将其转换为数字。因为其可能会失败,所以 `parse` 方法会返回一个结果类型,就像 read_line 方法一样(在前面的 "使用结果处理潜在失败 "中讨论过)。我们将再次使用 expect 方法,以同样的方式处理这个 Result。如果 parse 因无法从字符串中创建数字而返回 Err Result 变体,那么 expect 调用将导致游戏崩溃,并打印出我们给它的信息。如果 parse 能成功将字符串转换为数字,它将返回 Result 的 Ok 变体,而 expect 将从 Ok 值返回我们想要的数字。
此外,本示例程序中的这个 `u32` 注解,及那个与 `secret_number` 的比较,意味着 Rust 将推断出 `secret_number` 也应是个 `u32`。因此,现在这个比较,将是在两个相同类型值之间的了!
现在来运行一下这个程序!
`parse` 这个方法,只适用于逻辑上可以转换成数字的那些字符,因此很容易出错。例如,如果字符串包含着 `A👍%`,就无法将其转换为数字。因为其可能会失败,所以 `parse` 方法会返回一个结果类型,就像 `read_line` 方法一样(早先曾在 [“使用 `Result` 处理潜在失败”](#使用-result-处理潜在失效) 小节中讨论过)。我们将再次通过使用 `expect` 方法,以同样方式处理这个 `Result`。如果 `parse` 因无法从那个字符串,创建出一个数字而返回 `Err``Result` 变种,则 `expect` 这个调用,将导致游戏崩溃,并打印出我们给到他的信息。如果 `parse` 能成功将那个字符串转换为数字,他将返回 `Result``Ok` 变种,而 `expect` 将从这个 `Ok` 值,返回我们想要的数字。
现在咱们来运行一下这个程序:
```console
$ cargo run  101 ✘  3s 