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

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;}}}
}

相关文章:

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

文章目录 Rust语言介绍和猜数字游戏的实现cargo是什么使用Rust编写猜数字 Rust语言介绍和猜数字游戏的实现 Rust语言是一种系统编程语言&#xff0c;核心强调安全性、并发性以及高性能&#xff0c;由类似于C/C的底层控制能力&#xff0c;性能也非常接近&#xff0c;Rust有一些…...

STM32-汇编

学习arm汇编的主要目的是为了编写arm启动代码&#xff0c;启动代码启动以后&#xff0c;引导程序到c语言环境下运行。换句话说启动代码的目的是为了在处理器复位以后搭建c语言最基本的需求。因此启动代码的主要任务有&#xff1a; 初始化异常向量表&#xff1b; 初始化各工作模…...

利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例

引言 随着人工智能技术的不断进步&#xff0c;开发过程中的自动化程度也在逐步提高。阿里云推出的通义灵码AI程序员&#xff0c;作为一款创新型的智能编程助手&#xff0c;现已全面上线并兼容VS Code、JetBrains IDEs等多种开发环境。本文将介绍如何利用最新的Qwen2.5-Max模型…...

202503执行jmeter压测数据库(ScyllaDB,redis,lindorm,Mysql)

一、Mysql 1 、 准备MySQL 连接内容 2 、 下载连接jar包 准备 mysql-connector-java-5.1.49.jar 放到 D:\apache-jmeter-5.6.3\lib\ext 目录下面; 3 、 启动jmeter ,配置脚本 添加线程组---》JDBC Connection Configuration---》JDBC Request---》查看结果树。 1)测…...

【QT 多线程示例】两种多线程实现方式

文章目录 多线程实现方式一&#xff1a;继承QThread类方式二&#xff1a; 使用QObject::moveToThread()方法 多线程实现 在Qt中&#xff0c;实现多线程编程有两种常见的方式&#xff0c;它们分别是通过继承QThread类和使用QObject::moveToThread()方法。 方式一&#xff1a;继…...

excel文件有两列,循环读取文件两列赋值到字典列表。字典的有两个key,分别为question和answer。将最终结果追加到json文件

import pandas as pd import json import osdef excel_to_json_append(excel_path, json_path):# 1. 读取Excel数据到字典列表df pd.read_excel(excel_path, usecols["question", "answer"])new_data [{"question": str(row["question&qu…...

以太网 MAC 帧格式

文章目录 以太网 MAC 帧格式以太网帧间隔参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均附有参考链接&#xff0c;如侵权&#xff0c;请联系删除。 以太网 MAC 帧格式 以太网技术的正式标准是 IEEE 802.3&#xff0c;它规定了以太网传输数据的帧结…...

【PCB工艺】基础:电子元器件

电子原理图&#xff08;Schematic Diagram&#xff09;是电路设计的基础&#xff0c;理解电子元器件和集成电路&#xff08;IC&#xff09;的作用&#xff0c;是画好原理图的关键。 本专栏将系统讲解 电子元器件分类、常见 IC、电路设计技巧&#xff0c;帮助你快速掌握电子电路…...

docker 部署elk 设置账号密码

1. 先把 kibana 停掉 2.进入es 容器 docker exec -it 75895a078cbc /bin/bash 找到 bin 目录 执行 ./elasticsearch-setup-passwords interactive 全部设置一样的密码 ,不一样自己要记住&#xff0c;设置成功会输出如下内容 Changed password for user [apm_system] Chang…...

【微信小程序(云开发模式)变通实现DeepSeek支持语音】

整体架构 前端&#xff08;微信小程序&#xff09;&#xff1a; 使用微信小程序云开发能力&#xff0c;实现录音功能。将录音文件上传到云存储。调用云函数进行语音识别和 DeepSeek 处理。界面模仿 DeepSeek&#xff0c;支持文本编辑。 后端&#xff08;云函数 Node.js&#…...

从WebRTC到嵌入式:EasyRTC如何借助大模型提升音视频通信体验

随着人工智能技术的快速发展&#xff0c;WebRTC与大模型的结合正在为音视频通信领域带来革命性的变革。WebRTC作为一种开源实时通信技术&#xff0c;以其低延迟、跨平台兼容性和强大的音视频处理能力&#xff0c;成为智能硬件和物联网设备的重要技术支撑。 而EasyRTC作为基于W…...

前端样式库推广——TailwindCss

官方网址&#xff1a; https://tailwindcss.com/docs/installation/using-vite 中文官方文档&#xff1a;https://www.tailwindcss.cn/ github地址&#xff1a;tailwindcss 正在使用tailwindcss的网站&#xff1a;https://tailwindcss.com/showcase 一看github&#xff0c;竟然…...

Gemini分析屏幕截图时,如何处理图像模态(如界面元素、文字内容)与文本模态(用户指令)的语义对齐?

在通过Gemini大语言模型进行屏幕截图分析时&#xff0c;实现图像模态&#xff08;界面元素/文字内容&#xff09;与文本模态&#xff08;用户指令&#xff09;的语义对齐&#xff0c;需要结合多模态融合技术和领域知识。以下是具体的技术实现路径和挑战应对方案&#xff1a; 1.…...

【6】组合计数学习笔记

前言 关于今天发现自己连快速幂都忘记怎么写这件事 这篇博客是组合计数基础&#xff0c;由于大部分内容都是 6 6 6 级&#xff0c;所以我就给整个提高级的组合数学评了 6 6 6 级。 组合计数基础 加法原理与乘法原理 加法原理&#xff08;分类计数原理&#xff09;&#…...

Ai客服机器人系统源码

我将基于常见的自然语言处理库&#xff0c;用 Python 编写一个简单的 AI 客服机器人功能代码示例&#xff0c;它能处理常见问题并根据用户输入提供相应回复。 import nltk​ from nltk.chat.util import Chat, reflections​ ​ # 下载必要的NLTK数据​ nltk.download(pun…...

Redis——事务实现以及应用场景

本文介绍Redis事务相关的原理以及知识点&#xff0c;从redis的常用命令出发&#xff0c;深入理解redis在日常工作中的实际场景使用用法。 本文目录 一、Redis事务简介二、事务相关命令三、事务应用场景 一、Redis事务简介 Redis 事务本质上是一个命令队列。用户可以使用MULTI命…...

SpringBoot 第二课(Ⅰ) 整合springmvc(详解)

目录 一、SpringBoot对静态资源的映射规则 1. WebJars 资源访问 2. 静态资源访问 3. 欢迎页配置 二、SpringBoot整合springmvc 概述 Spring MVC组件的自动配置 中央转发器&#xff08;DispatcherServlet&#xff09; 控制器&#xff08;Controller&#xff09; 视图解…...

Kafka 八股文

一、基础概念 1. Kafka 是什么&#xff1f;它的核心组件有哪些&#xff1f; Kafka 的定义 Kafka 是一个 分布式流处理平台&#xff0c;最初由 LinkedIn 开发&#xff0c;后成为 Apache 顶级项目。它主要用于 高吞吐量的实时数据流处理&#xff0c;支持发布-订阅模式的消息传递…...

OpenHarmony 开源鸿蒙北向开发——3.配置SDK

安装、配置完成之后我们就要配置SDK。 我们创建工程后&#xff0c;点击右上角设置 进入设置 进入OpenHarmony SDK&#xff0c;选择编辑 这里配置一下SDK安装位置 点击完成 这里我们API版本勾选第一个即可 确认安装 勾选接受 这里要等一会 安装完成后&#xff0c;点击完成...

电子工程师转战汽车OEM主机厂之路

文章目录 1 电子工程师2 汽车系统工程师 第一篇分享一个笔者2018年的一个心得文章&#xff0c;回头想想从事汽车行业也小8年了&#xff0c;从懵懂稚嫩到所谓的老油条&#xff0c;也是难忘的经历&#xff0c;希望我的经历对从事电子行业和汽车行业的小伙伴有所帮助。 1 电子工程…...

vulhub Matrix-Breakout

1.下载靶机&#xff0c;打开靶机和kali虚拟机 2.查询kali和靶机ip 3.浏览器访问 访问81端口有登陆界面 4.扫描敏感目录 kali dirb 扫描 一一访问 robot.txt提示我们继续找找&#xff0c;可能是因为我们的字典太小了&#xff0c;我们换个扫描器换个字典试下,利用kali自带的最大…...

Unity3D开发AI桌面精灵/宠物系列 【二】 语音唤醒 ivw 的两种方式-Windows本地或第三方讯飞等

Unity3D 交互式AI桌面宠物开发系列【二】ivw 语音唤醒 该系列主要介绍怎么制作AI桌面宠物的流程&#xff0c;我会从项目开始创建初期到最终可以和AI宠物进行交互为止&#xff0c;项目已经开发完成&#xff0c;我会仔细梳理一下流程&#xff0c;分步讲解。 这篇文章主要讲有关于…...

三月九次前端面试复盘:当场景题成为通关密钥

三月初集中面了包括字节、美团、滴滴在内的9家公司&#xff0c;经历7场技术面2场Leader面后&#xff0c;发现如今的面试逻辑已发生根本转变。这里分享真实经历与题目&#xff0c;供近期求职者参考。 一、面试形态变化&#xff1a;从理论背诵到实战推演 1. 八股文边缘化&#…...

STM32 —— 嵌入式系统、通用计算机系统、物联网三层架构

目录 一、嵌入式系统的概念 二、通用计算机系统与嵌入式系统的比较 用途 硬件 软件 性能与功耗 开发与维护 三、嵌入式系统与物联网的关系 四、物联网的三层架构 1. 感知层&#xff08;Perception Layer&#xff09; 2. 网络层&#xff08;Network Layer&#xff09; …...

如何选择合适的 AI 模型?(开源 vs 商业 API,应用场景分析)

1. 引言 在 AI 迅猛发展的今天&#xff0c;各类 AI 模型层出不穷&#xff0c;从开源模型&#xff08;如 DeepSeek、Llama、Qwen&#xff09;到商业 API&#xff08;如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini&#xff09;&#xff0c;每种方案都有其优势与适用…...

视频对讲系统中,强插和强拆;视频分发功能

强插和强拆 在视频对讲系统中&#xff0c;强插和强拆是两个具有特定功能的操作&#xff0c;具体含义如下&#xff1a; 强插功能&#xff1a;指在视频对讲过程中&#xff0c;具有更高权限的用户或管理员可以强行插入正在进行的通话或视频连接。例如&#xff0c;当小区保安室监控…...

C++输入输出流第一弹:标准输入输出流 详解(带测试代码)

目录 C输入输出流 流的四种状态&#xff08;重点&#xff09; 标准输入输出流 标准输入流 逗号表达式 1. 逗号表达式的基本规则 示例 2. 图片中的代码分析 关键点解析 3. 常见误区 误区 1&#xff1a;逗号表达式等同于逻辑与 && 误区 2&#xff1a;忽略输入…...

{瞎掰} 手机安装app问题:app签名,手机 or OS官方商店 其他非官方app源,安全防护 突破限制

以下&#xff0c;在华为安卓系统手机中&#xff0c;在安装app过程中得到的一些可能是错误的经验。 商品化 app 的收钱方式&#xff1a;通过商店来收钱&#xff0c;通过 app 本身提供的注册码功能来收钱&#xff0c;或是其他的收钱方式。 手机安装 app的特点 从官方商店里安装…...

鸿蒙NEXT项目实战-百得知识库05

代码仓地址&#xff0c;大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点&#xff1a; 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…...

记录一次,rabbitmq开启stomp插件之后,还是连不上15674端口的问题

原因是装在docker 里面的rabbitmq 没有映射15674端口&#xff0c;需重新删除容器之后重新运行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本号 进入docker容器开启插件 docker exec -it rabbitm…...