编写rust猜数游戏
猜数游戏
这是一个经典的猜数游戏,玩家需要猜出一个随机生成的1到100之间的整数。
用户输入一个猜测的数字,程序会告诉用户猜测的数字是过高、过低还是正确。
玩家需要不断猜测,直到猜对为止。
全部代码
1 | use rand::Rng; |
我的代码可能和官方稍有不同,因为我使用了更高版本的rand crate。
1 | [package] |
知识点
在本节中我们先大概了解这些内容,初步对rust语言有个了解,在后续的课程中会对里面的一些知识点详细讲解。
标准库和 crate
- rust 使用
use引入标准库中的模块,例如std::cmp::Ordering用于比较两个值的大小关系,std::io用于处理标准输入输出,rand::Rng用于生成随机数。 - std 为标准库的缩写,用于访问标准库中的函数和类型。
- rand 是一个 crate(包),用于生成随机数。rand是一个非标准库,需要在
Cargo.toml中添加依赖。使用cargo add rand 可以添加rand crate。或者在Cargo.toml中手动添加依赖。 - crates.io 是一个 Rust 社区维护的 crate 仓库,用户可以在其中查找和分享 Rust 代码。
变量和可变性
- rust 中的变量默认是不可变的,即一旦绑定了一个值,就不能改变它。例如
let x = 5;绑定了一个值为5的变量x,之后不能再将x绑定到其他值。 - 如果需要一个可变的变量,需要使用
mut关键字。例如let mut x = 5;绑定了一个可变的变量x,之后可以将x绑定到其他值。 - 变量的类型可以在声明时指定,也可以根据赋值的类型自动推断。例如
let x = 5;中,x的类型被推断为i32。 - 当然rust也有const关键字,用于定义常量,例如
const X: i32 = 5;定义了一个值为5的常量X,之后不能再改变它。
变量默认是不可变的,这是rust的一个设计原则,他可以帮助我们避免一些错误。主要作用是用在这种情况:
- 当我们定义的一个变量后面需要改变数据类型的时候,比如一开始用户输入的数字是一个字符串,但是后面和随机数进行比较我们需要将字符串转换为整数。
其他知识点
- 生成新的字符串s可以使用
let s = String::new(); - ::new 那一行的 :: 语法表明 new 是 String 类型的一个 关联函数(associated function)。关联函数是针对某个类型实现的函数,在这个例子中是 String。
- 代码中的 .read_line(&mut guess) 方法,用来获取用户输入。 将
&mut guess作为参数传递给 read_line 函数,让其将用户输入储存到这个字符串中。 - read_line 的工作是,无论用户在标准输入中键入什么内容,都将其追加(不会覆盖其原有内容)到一个字符串中,因此它需要字符串作为参数。这个字符串参数应该是可变的,以便 read_line 将用户输入附加上去。
&表示这个参数是一个 引用(reference),它允许多处代码访问同一处数据,而无需在内存中多次拷贝。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 sharpmind.tech!

