02猜数游戏

需求

程序将会随机生成一个 1 到 100 之间的随机整数。接着它会请玩家猜一个数并输入,然后提示猜测是大了还是小了。如果猜对了,它会打印祝贺信息并退出。

涉及知识点

let,match,方法,关联函数,外部crate

项目

1
2
cargo new guessing_game
cd guessing_game

Prelude

默认情况下,Rust 将 prelude 模块中少量的类型引入到每个程序的作用域(scope)中。如果需要的类型不在 prelude中,就必须使用use 语句显示地将其引入作用域(scope)中。

关联函数

String::new(),中:: 语法表明,newString类型的一个关联函数。关联函数是针对类型实现的。new 是创建类型实例的惯用函数名。

  • 关联函数有点类似于Java中的静态方法,与类关联,不与实例关联。

引用

&mut guess,这里的&表示这个参数是一个引用(reference),它允许多处代码访问同一处数据,而无需在内存中多次拷贝。

  • Rust 的一个主要优势就是安全而简单的操作引用。

使用Result 类型来处理潜在的错误

Result枚举类型(enumerations),通常也写作 enums。枚举类型持有固定集合的值,这些值被称为成员(variants)。

Rust 标准库中有很多Result的类型,一个通用的 Result以及在子模块中的特化版本,比如io::Result

通常消除警告的正确做法是,编写错误处理代码。

crate

crate 是一个 Rust 代码包

  • 二进制crate
    • 会有一个可执行文件
  • 库crate
    • 可以包含任意能被其他程序使用的代码。

Cargo可以引用外部的crate。需要修改 Cargo.toml 文件,引入依赖。

1
2
[dependencies]
rand = '0.8.3'
1
2
3
4
为什么这里这么慢?修改第三方镜像源

PS C:\Tableware\codes\rust\guessing_game> cargo build
Blocking waiting for file lock on package cache

解决方法,更新国内源

1
2
3
4
5
6
7
8
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
# 指定镜像
replace-with = 'tuna'

# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

trait

1
use rand::Rng;

Rng 是一个 trait,它定义了随机数生成器应该实现的方法,想使用这些方法,此 trait 必须在作用域中,所以需要使用 use 引入。

rand 中的范围表达式

1
let secret_number = rand::thread_rng().gen_range(1..101);

上面 gen_range() 方法接受一个范围表达式作为参数,这里的范围表达式,使用start..end 的形式,[start,end),包括start,但是不包括 end。

  • 也可以使用 1..=100 与 1..101 作用等价。

如何查看 crate 本地文档

1
cargo doc --open

我们不可能凭空就知道应该 use 哪个 trait 以及应该从 crate中调用哪个方法。crate 的使用说明位于其中档中。 可以在本地运行上面命令,来查看所有本地依赖提供的文档,并在浏览器中打开。

match 分支表达式

一个 match 表达式由分支(arms)构成。一个分支包含一个模式(pattern)和表达式开头的值与分支匹配时应该执行的代码。

1
2
3
4
5
match 表达式 {
分支一 => 表达式,
分支二 => {多行表达式时,使用代码块},
分支三 => (), // 没有内容时可以使用 () 圆括号。
}
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 ligongzhao
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信