Rust语言介绍和猜数字游戏的实现

文章目录

Rust语言介绍和猜数字游戏的实现

Rust语言是一种系统编程语言,核心强调安全性、并发性以及高性能,由类似于C/C++的底层控制能力,性能也非常接近,Rust有一些特性

  1. 所有权系统,这个可以自动管理内存,无需垃圾回收器,保证数据的安全
  2. 零成本抽象,高层抽象不会带来运行时的开销,运行时的效率会很高
  3. 线程安全,在编译阶段就能防止数据竞争的问题
  4. 强类型语言,类型转换非常严格,提升代码的可靠性
  5. cargo管理工具非常好用,简化项目的管理和依赖管理

cargo是什么

cargo是rust的官方管理构建工具,一来可以创建项目、构建项目、运行项目,二来可以管理整个项目依赖的第三方库,cargo基本上涵盖了所有的第三方库,可以在www.crate.io中查看

一些常用的方法如下

shell 复制代码
cargo new project_name # 创建rust项目
cargo build # 构建项目生成可执行文件
cargo run # 构建并允许项目
cargo add lib_name # 添加最新版本依赖
cargo remove lib_name # 删除依赖
cargo update [lib_name] # 更新依赖 不指定的话是更新所有依赖
cargo --help 
  1. 新创建的rust项目中会包含项目配置文件,包含项目名称、项目版本、第三方库的信息
    1. 创建项目可以在命令后指定项目类型cargo new project_name --bin(--lib)
    2. 默认为bin
    3. 分别为二进制项目和库项目
    4. 也就是说可以指定我写的项目是可执行文件,必须有main.rsmain函数作为程序入口
    5. 库项目主要是用于封装逻辑,供其他程序调用,第三方库也都是库项目
  2. cargo run 可以指定debug模式或者release模式分别使用--debug--release 默认为debug
  3. 可以指定版本,例如cargo add rand@0.7
    1. 也可以直接在配置文件中添加rand = "0.7"

使用Rust编写猜数字

这里我们先不具体介绍规则,只是大概了解一下

  1. Rust的库管理是通过Crate(包)进行管理的,主要分为第三方库和本地库
  2. 在Rust中是区分函数和宏的,使用宏时需要加!
  3. fn 表示函数
  4. 1..101是表示范围的形式,等价于1 <= num && num < 101
    1. 如果是闭区间则是1..=100
  5. loop表示死循环,等价于while(true)
  6. 在使用模块时需要指定,类似于C++的作用域
  7. 声明变量时使用let
    1. 可以不指定类型,例如let rand_num会自动补全类型
    2. 有时需要指定类型,例如let guess: u32 = 或者let mut guess: String =
    3. 虽然可以不指定类型,但是Rust是一个强类型的语言
    4. mut指的是一个变量是否可以改变,类似于C++中的const但是是相反的作用
    5. 也就是说Rust的变量默认是不可被重新赋值的,只有被设定为mut才可以
  8. match 表示的是模式匹配,可以理解为一个高级的switch语句
    1. 基本语法是 match value {} (value是要匹配的值)
    2. 然后其中的每一项表示对应的返回值或者语句
    3. 可以使用{}来写多个语句
    4. _表示default
  9. Rust在可能失败的方法中会返回一个Result类型,主要是用于错误处理
    1. 需要在返回值中使用.expect("")进行处理
    2. 或者使用match分别对成功和失败进行处理
rust 复制代码
use rand::Rng; // 引入第三方库
use std::{cmp::Ordering, io}; 

// 主函数
fn main() { 
    println!("Guess Num");
    let rand_num = rand::rng().random_range(1..101); // 生成一个1到100的随机数
    println!("random num is {}", rand_num);
    loop {
        println!("Please Input Your Guess:");
        let mut guess: String = String::new();
        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => {
                println!("Place input a NUM!");
                continue;
            }
        };
        println!("You Guessed {}", guess);

        match guess.cmp(&rand_num) {
            Ordering::Less => println!("Too Small"),
            Ordering::Greater => println!("Too Big"),
            Ordering::Equal => {
                println!("You Win!");
                break;
            }
        }
    }
}
相关推荐
名字还没想好☜3 分钟前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
geovindu4 分钟前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
Scott9999HH9 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社10 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海10 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖11 小时前
JDK 26 新特性详解
java·开发语言
FairGuard手游加固11 小时前
2026年7月份国产游戏审批信息
游戏
马优晨11 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
doiito13 小时前
【AI 应用】从“外国人味”到地道中文:kokoroi-rs v0.1.2 架构升级深度解析
ai·rust·系统设计
人邮异步社区13 小时前
怎么把C语言学到精通?
c语言·开发语言