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

相关文章
|
19天前
|
Rust 监控 编译器
解密 Python 如何调用 Rust 编译生成的动态链接库(一)
解密 Python 如何调用 Rust 编译生成的动态链接库(一)
30 2
|
19天前
|
Rust 安全 Python
解密 Python 如何调用 Rust 编译生成的动态链接库(二)
解密 Python 如何调用 Rust 编译生成的动态链接库(二)
22 1
|
27天前
|
Rust 编译器 测试技术
30天拿下Rust之深入Cargo
30天拿下Rust之深入Cargo
23 0
|
2月前
|
Rust 编译器 开发者
Cargo:Rust的神秘助手,它将如何改变包管理游戏规则?
【8月更文挑战第31天】Rust的包管理器Cargo简化了依赖管理和构建过程,与编译器无缝集成,提供从依赖下载到编译构建的全套解决方案。通过`cargo new`创建项目后,编辑`Cargo.toml`文件即可轻松管理依赖。Cargo还支持自动生成文档、运行测试及发布代码,并通过`crates.io`平台方便查找和分享Rust库,是Rust生态系统中的重要工具,有助于提升开发者生产力。
49 1
|
2月前
|
Rust 搜索推荐 算法
Massa用到的主流Rust库列表
这篇文章展示了Massa项目在构建和运行时所依赖的一系列Rust库。这些库包括但不限于用于WebAssembly的`wasmer`,用于异步编程的`tokio`,用于处理日期和时间的`chrono`,以及用于加密的`aes-gcm`等。特别提到了`zstd-sys`这个库的版本`v2.0.8+zstd.1.5.5`,用于Zstandard压缩算法。文章还列出了其他多个库的版本信息,反映了Massa项目在Rust生态系统中的技术栈。
27 3
|
3月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
|
4月前
|
Rust Shell 索引
使用阿里云镜像加速Rust与Cargo安装及更新
使用阿里云镜像加速Rust与Cargo安装及更新
756 0
|
4月前
|
Rust Unix Windows
使用Cargo国内镜像提升Rust开发效率
使用Cargo国内镜像提升Rust开发效率
375 0
|
2月前
|
Rust 安全 Go
揭秘Rust语言:为何它能让你在编程江湖中,既安全驰骋又高效超车,颠覆你的编程世界观!
【8月更文挑战第31天】Rust 是一门新兴的系统级编程语言,以其卓越的安全性、高性能和强大的并发能力著称。它通过独特的所有权和借用检查机制解决了内存安全问题,使开发者既能享受 C/C++ 的性能,又能避免常见的内存错误。Rust 支持零成本抽象,确保高级抽象不牺牲性能,同时提供模块化和并发编程支持,适用于系统应用、嵌入式设备及网络服务等多种场景。从简单的 “Hello World” 程序到复杂的系统开发,Rust 正逐渐成为现代软件开发的热门选择。
56 1
|
9天前
|
Rust 安全 网络安全
在 Rust 语言中,寻找企业上网行为管理软件的突破
在数字化企业环境中,上网行为管理软件对于保障网络安全和提升工作效率至关重要。Rust 语言凭借其安全性、高性能和并发性,为开发此类软件提供了新机遇。本文通过几个 Rust 代码示例,展示了如何实现网址检查、访问频率统计及访问控制等功能,旨在探索 Rust 在企业上网行为管理中的应用潜力。
16 0