一、Cargo配置问题与VSC的实用插件下载
1、解决Cargo拉取crates.io非常慢的问题
在电脑上找到.cargo文件夹
进入.cargo文件夹并创建config文件(一定要按照图示操作)
使用vsc打开config文件,粘贴以下代码:
[source.crates-io] replace-with = ‘ustc’ [source.ustc] registry = “git://mirrors.ustc.edu.cn/crates.io-index”
最后记得保存哦,快捷键:ctrl+s
2、VSC自动管理Rust项目的实用插件
管理配置文件:TOML Language Support
Rust包管理:crates
二、编写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; } } } }
运行效果:
3、Rust语法学习
解析源码中的 生成随机数、数据类型转换、match和 loop 的含义及使用
利用rand包生成随机数
let symth =rand::thread_rng().gen_range(1, 101);
调用rand包里的thread_rng()中的gen_range()方法返回一个随机数并赋值给定义的常量symth
gen_range()参数列表输入两个参数,第一个是随机数的最小值,第二个数是最大值
区间是前开后闭的,上面代码随机数取值范围就是1~100。
类型转换
let guess:u32= guess.trim().parse().expect("转换错误");
这里可以看到我又定义了一个guess变量,在Rust语言里可以定义重名的变量,但这时候前面定义重名变量就会被隐藏(具体隐藏规则在后面文章会讲)这行代码中第一个guess是新变量,第二个guessd的隐藏变量,依然是字符串类型。
trim()函数可以去掉字符串的空白以及换行(我们输入完毕需要按下回车,trim可以将其去掉);
parse()函数会把变量解析成一个对应的数据类型,而Rust中的整型有i32、u32、i64等,因此我给前面的guess后面加上:u32,这样parse()函数就可以把字符串解析为u32的整型
expect()函数在上文有讲过,属于会返回Result类的枚举,有遗忘的朋友可以翻阅上篇博文
match分支 match guess.cmp(& symth){ Ordering::Less => ......
match是Rust中十分常用的分支语句,Ordering是一个枚举类型,含有三个变体,match与其联用,根据枚举的返回结果来执行对于的分支语句。cmp()是Rust里的一个用来比较的方法,参数列表里传入的就是上面生成的随机数。
Ordering类型的三个变体为:Less、Greater和Equal,分别代表小于、大于和等于
cmp和Ordering使用前需要从标准库引入:use std::cmp::Ordering;
loop循环
loop{ ...... Ordering::Equal=> { println!("you win !"); break; } }
loop在Rust里是一个死循环,可以配合Ordering和break关键字来控制流程并跳出循环。