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

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

一、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关键字来控制流程并跳出循环。

相关文章
|
6天前
|
Rust 安全 开发者
Rust之旅:打造并发布你的首个Rust库
本文将引导读者走进Rust的世界,从基础概念讲起,逐步深入到如何创建、测试、打包和发布自己的Rust库。通过实际操作,我们将理解Rust的独特之处,并学会如何分享自己的代码到Rust社区,从而为开源世界做出贡献。
|
6天前
|
Rust 区块链
学Rust不学Cargo,等于没学Rust:features特性详解
在 Rust 中,Cargo 的 "features" 是一种条件编译机制,允许在编译 crate 时编译部分代码。这样可以在一个 crate 中提供多个功能,并根据需要选择性地启用或禁用这些功能。
|
6天前
|
存储 JSON Rust
【一起学Rust | 进阶篇 | reqwest库】纯 Rust 编写的 HTTP 客户端——reqwest
【一起学Rust | 进阶篇 | reqwest库】纯 Rust 编写的 HTTP 客户端——reqwest
335 0
|
6天前
|
存储 Rust 自然语言处理
【一起学Rust | 进阶篇 | thesaurus-rs库】Rust 的离线同义词库——thesaurus-rs
【一起学Rust | 进阶篇 | thesaurus-rs库】Rust 的离线同义词库——thesaurus-rs
36 0
|
6天前
|
存储 Rust 安全
【Rust】——猜数游戏
【Rust】——猜数游戏
30 0
|
6天前
|
存储 Rust 安全
Rust标准库概览:集合、IO、时间与更多
本文将带领读者深入了解Rust标准库中的一些核心模块,包括集合类型、输入/输出处理、时间日期功能等。我们将通过实例和解释,探讨这些模块如何使Rust成为高效且安全的系统编程语言。
|
6天前
|
Rust 测试技术 开发工具
Rust中的Cargo:依赖管理与项目构建
本文将深入探讨Rust编程语言中的Cargo工具。Cargo不仅用于构建Rust项目,还是管理项目依赖的关键组件。我们将了解如何使用Cargo创建新项目、添加依赖项、以及如何通过Cargo进行构建和测试,从而确保项目的顺利开发与部署。
|
6天前
|
Rust Java 编译器
学Rust不学Cargo,等于没学Rust:workspace详解
Rust 中的`Workspace`是一种组织多个 Rust crate(项目或库)的结构。使得它们可以协同工作、共享依赖关系,以及更方便地进行管理和构建。 如果你是Java开发者,workspace这个概念类似Java中的`maven`父工程。 子工程可以共享父工程中的很多配置项,如依赖,版本等配置。子工程可以`选择性的继承`父工程的配置。
|
6天前
|
C++ Rust 算法
Rust每日一练(Leetday0019) 跳跃游戏、合并区间、插入区间
Rust每日一练(Leetday0019) 跳跃游戏、合并区间、插入区间
25 0
Rust每日一练(Leetday0019) 跳跃游戏、合并区间、插入区间
|
6天前
|
C++ Python Rust
Rust每日一练(Leetday0015) 字符串相乘、通配符匹配、跳跃游戏II
Rust每日一练(Leetday0015) 字符串相乘、通配符匹配、跳跃游戏II
28 0
Rust每日一练(Leetday0015) 字符串相乘、通配符匹配、跳跃游戏II