【Rust指南】配置加速Cargo下载、更新依赖库|利用随机数编写Rust猜数游戏_开发语言

文章目录

  • ​​  前言​​
  • ​​一、Cargo配置问题与VSC的实用插件下载​​
  • ​​1、解决Cargo拉取crates.io非常慢的问题​​
  • ​​2、VSC自动管理Rust项目的实用插件​​
  • ​​二、编写Rust 的猜数游戏​​
  • ​​1、抓取随机数的依赖库​​
  • ​​2、使用rand包并编写源代码​​
  • ​​3、Rust语法学习​​

  上篇Rust指南文章讲解了使用Cargo工具创建Rust项目的方法并编写讲解了该语言的输入输出格式。那么今天详细的教大家如何将Cargo自动更新依赖库的网址从国外改到国内镜像,这样无疑加快了开发的效率,而且更改完成后会举一个猜数游戏的例子,让大家轻松掌握更多Rust语法。


一、Cargo配置问题与VSC的实用插件下载

1、解决Cargo拉取crates.io非常慢的问题

  1. 在电脑上找到​​.cargo​​文件夹
  2. 进入.cargo文件夹并创建​​config​​文件(一定要按照图示操作)
  3. 使用vsc打开config文件,粘贴以下代码:

【Rust指南】配置加速Cargo下载、更新依赖库|利用随机数编写Rust猜数游戏_rust_02

[source.crates-io]
replace-with = ‘ustc’
[source.ustc]
registry = “git://mirrors.ustc.edu.cn/crates.io-index”
最后记得保存哦,快捷键:​​​ctrl+s​

2、VSC自动管理Rust项目的实用插件

  1. 管理配置文件:​​TOML Language Support​
  2. 【Rust指南】配置加速Cargo下载、更新依赖库|利用随机数编写Rust猜数游戏_开发语言_03


  3. Rust包管理:​​crates​
  4. 【Rust指南】配置加速Cargo下载、更新依赖库|利用随机数编写Rust猜数游戏_随机数_04


二、编写Rust 的猜数游戏

1、抓取随机数的依赖库

Rust标准库里并没有生成随机数的包,因此需要利用Cargo工具拉取crates.io里的rand包:

  • 使用Cargo新建Rust 项目并在​​Cargo.toml​​​的依赖标签下使用rand=“0.3.14”,开始会报错,稍等片刻Cargo会将该库拉取到该项目并可以在​​Cargo.lock​​文件中查看具体信息。
  • Cargo.lock里存放已经拉取的依赖信息

2、使用rand包并编写源代码

猜数游戏源码:

use std::{io, cmp::Ordering};
use rand::Rng;

fn main() {
println!("****猜数小程序****");
let symth =rand::thread_rng().gen_range(1, 101);
// println!("神秘数字为:{}",symth);
loop{
println!("输入你猜的数字:");
let mut guess =String::new();
io::stdin().read_line(&mut guess).expect("读取失败");
let guess:u32= guess.trim().parse().expect("转换错误");

println!("你猜的数字为:{}",guess);
match guess.cmp(& symth) {
Ordering::Less => println!("Too small !"),
Ordering::Greater=>println!("Too big !"),
Ordering::Equal=> {
println!("you win !");
break;
}
}
}
}

运行效果:

【Rust指南】配置加速Cargo下载、更新依赖库|利用随机数编写Rust猜数游戏_随机数_05

3、Rust语法学习

解析源码中的 生成随机数、数据类型转换、match和 loop 的含义及使用

  1. 利用rand包生成随机数
let symth =rand::thread_rng().gen_range(1, 101);

调用​​rand​​​包里的​​thread_rng()​​​中的​​gen_range()​​方法返回一个随机数并赋值给定义的常量symth

  • gen_range()参数列表输入两个参数,第一个是随机数的最小值,第二个数是最大值
  • 区间是前开后闭的,上面代码随机数取值范围就是1~100。
  1. 类型转换
let guess:u32= guess.trim().parse().expect("转换错误");

这里可以看到我又定义了一个​​guess​​变量,在Rust语言里可以定义重名的变量,但这时候前面定义重名变量就会被隐藏(具体隐藏规则在后面文章会讲)这行代码中第一个guess是新变量,第二个guessd的隐藏变量,依然是字符串类型。

  • ​trim()​​函数可以去掉字符串的空白以及换行(我们输入完毕需要按下回车,trim可以将其去掉);
  • ​parse()​​​函数会把变量解析成一个对应的数据类型,而Rust中的整型有​​i32​​​、​​u32​​​、​​i64​​​等,因此我给前面的guess后面加上​​:u32​​,这样parse()函数就可以把字符串解析为u32的整型
  • ​expect()​​函数在上文有讲过,属于会返回Result类的枚举,有遗忘的朋友可以翻阅上篇博文
  1. match分支
match guess.cmp(& symth){
Ordering::Less => ......
}

​match​​​是Rust中十分常用的分支语句,​​Ordering​​​是一个枚举类型,含有三个变体,match与其联用,根据枚举的返回结果来执行对于的分支语句。​​cmp()​​是Rust里的一个用来比较的方法,参数列表里传入的就是上面生成的随机数。

  • Ordering类型的三个变体为:​​Less​​​、​​Greater​​​和​​Equal​​,分别代表小于、大于和等于
  • cmp和Ordering使用前需要从标准库引入:​​use std::cmp::Ordering​​;
  1. loop循环
loop{
......
Ordering::Equal=> {
println!("you win !");
break;
}
}

​loop​​​在Rust里是一个死循环,可以配合​​Ordering​​​和​​break​​关键字来控制流程并跳出循环。


​有关Cargo配置和Rust猜数游戏的内容到此结束,下一篇博客我们不见不散!​