当前位置: 首页 > news >正文

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

文章目录

    • Rust语言介绍和猜数字游戏的实现
      • cargo是什么
      • 使用Rust编写猜数字

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

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

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

cargo是什么

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

一些常用的方法如下

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分别对成功和失败进行处理
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;
            }
        }
    }
}

相关文章:

  • Flink集群部署
  • 集装箱箱号OCR识别技术,在铁路物流场站集装箱装卸机械数字化系统中的应用
  • 高级java每日一道面试题-2025年3月05日-微服务篇[Eureka篇]-Eureka在微服务架构中的角色?
  • nginx keepalive设置失效k6显示i/o timeout解决方案
  • Redis项目:秒杀业务(优化)
  • 知识蒸馏:让大模型“瘦身”的魔法
  • LiteratureReading:[2016] Enriching Word Vectors with Subword Information
  • Mac:Maven 下载+安装+环境配置(详细讲解)
  • 过往记录系列 篇四:年报月行情历史梳理
  • std::expected
  • 深度学习 第4章 数值计算和 Deepseek 的实践
  • 【初学者】怎样学习、使用与研究算法?
  • 阅读《Vue.js设计与实现》 -- 02
  • 【Notepad】Notepad优化笔记AutoHotkey语法高亮\设置替换默认的notepad程序\设置主题\增加返回上一个编辑地方插件
  • Android 12系统源码_系统启动(一)init进程
  • 配置阿里云yum源
  • 算法模型从入门到起飞系列——深度优先遍历(DFS)
  • 数据无忧:自动备份策略全解析
  • Java 集合框架
  • 基于FPGA的DDS连续FFT 仿真验证
  • 10台核电新机组获核准,上海核电厂商独揽超500亿元订单
  • 春暖花开,为何皮肤却闹起了小情绪?
  • 牛市早报|今年国内核电项目审批首次开闸,离境退税起退点下调
  • 人民日报:应对外贸行业风险挑战,稳企业就是稳就业
  • 加拿大今日大选:房价、印度移民和特朗普,年轻人在焦虑什么?
  • 上海市委常委会传达学习总书记重要讲话精神,研究张江科学城建设等事项