news 2026/7/7 8:13:41

Rust语言学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rust语言学习笔记

本文假设你已经学过cpp语言

变量部分

可以自动推断类型

变量默认不可改变量要用letmut进行声明同名可以进行遮蔽不限类型

变量类型i32这种let或者letmut进行声明

元组VS数组元组任意变量集合数组只能一种元素但是都不能改变大小元组.来访问数组还是[]

函数部分

函数参数指定类型但是后面指定go一样

rust语句表达式区别是否返回值像是leta=5就不会返回值但是cpp赋值就会返回5.表达式可以语句部分表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值。

函数返回值首先函数名后面加上类型fnfive()->i32...使用return可以提前返回在最后表达式代表返回

一定不能加了就是语句语句就是操作序列不返回那么函数就没有返回值

控制

if表达式:

这里if后面条件必须bool不支持默认

if要是分支表达式赋值必须保证所有分支类型一样不然可能会出现问题原因是rust需要编译时候就要指定类型

loop表达式

looploop可以返回值break后面对应就可以返回嵌套循环可以用循环标签指定break或者continue某一层不用默认最里层

while后面条件符合循环不符合跳出

forfor循环可以对于元组或者数组每一元素执行计算fortepina...

所有权

长度可变长度固定

所有权是用来垃圾回收

string分配类似于rall离开作用内存自动的释放droprust是不存在拷贝只会移动之前拷贝会失效同时赋值之后原来的也会释放

拷贝要用clone

cpp虽然RALL但是主要自己函数但是rust自己调用dropcpp原来指针实效但是还是有可能被访问但是rust编译阶段拦截这种行为

可以定义引用&定义就可以直接使用然后不拿所有权&mut规定可变引用如果你有一个对该变量的可变引用,你就不能再创建对该变量的引用。引用作用最后一次使用之后结束

当你拥有一些数据的引用,编译器确保数据不会在其引用之前离开作用域。

slice元组或者数组一部分引用

结构体

差不多cpp就是赋值时候要注意move但是针对具体某一个元素操作比如move第一元素但是第二个还可以正常访问

可以结构体绑定函数impl然后要用&self同时类似cpp静态函数rust也提供这种函数可以通过结构体方法进行访问

crate

一个项目包含多个cratecrate最小编译单元就是一个文件包含main编译产生可执行文件二进制main不包含crate

Rust 中 crate 的边界由 crate root 决定,不由 .rs 文件数量决定。单个 .rs 文件只有在作为 crate root 被编译时才是 crate,否则只是模块。

Rust 通过文件/目录名来表示模块层级

目录名必须与模块名一致,否则模块路径无法映射

某个模块子模块必须模块同名目录

现在进行总结crate可以包含别的mod然后这个mod可以直接跟在后面或者是一个同级目录文件.rs或者模块名/mod.rs,然后子模块还可以引入模块如果是一个同级目录文件.rs那么子模块必须放在一个同名目录然后模块名/mod.rs就直接放在同一就可以pub可以模块引用模块模块可以访问模块use可以引入模块然后哦就可以直接最后一个名字来访问而不是每一次都一大堆同时在 Rust 中,引入父模块(use path)并不会自动把子模块、子项或 trait 一起引入作用域。 子项必须显式引入。

vectorstringhashmap

vector

letv:Vec<i32>=Vec::new();push();直接或者getget返回None会奔溃注意要用&不然move

letv=vec![1,2,3];

有一个引用之后可能就会拒绝push

遍历forin

多种类型枚举赋值

string

string实际就是一个vec不过多了一些功能大部分借用形式出现强调这里不能索引因为元素字节

hashmap

Trait

是一种类似于接口东西

golong不一样的地方在于区别在于impl关键字之后,我们提供需要实现 trait 的名称

要 use trait 才能调用 trait 方法

最重要的可以用这个接受不同的类型只要实现这个接口就可以进行匹配

生命周期注解指定引用生命周期确保多个引用一样

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 16:12:54

算法题 设计哈希映射

设计哈希映射 问题描述 不使用任何内建的哈希表库设计一个哈希映射&#xff08;HashMap&#xff09;。 实现 MyHashMap 类&#xff1a; void put(int key, int value) 向哈希映射中插入键值对 (key, value)。如果键已经存在&#xff0c;更新对应的值。int get(int key) 返回特定…

作者头像 李华
网站建设 2026/7/7 12:38:24

PaperXie 如何重塑开题报告的“研究可行性蓝图”属性:一种面向“从构想到落地”闭环构建的智能协作框架——一位研究生的真实实践记录

paperxie-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 https://www.paperxie.cn/ai/openingReporthttps://www.paperxie.cn/ai/openingReport 在研究生培养体系中&#xff0c;开题报告常被视为一项形式化的行政程序。然而&#xff0c;从学术本质来看&#xf…

作者头像 李华
网站建设 2026/7/6 16:16:40

单片机stm32系列——PWM配置应用LED呼吸灯,搭配stm32cubeMX+keil5

1.配置TIM3&#xff0c;设置为内部时钟源&#xff0c;使用CH1通道&#xff0c;会在固定输出PA6引脚口2.打开TIM3中断向量管理器NVIC的使能3.生成代码裸机开发4.打开keil5工程&#xff0c;发现在多了一个tim.c文件&#xff0c;里面就配置了TIM3配置及PWM的配置5.主函数前启动PWM…

作者头像 李华
网站建设 2026/7/7 12:03:33

CrystalFetch:Mac用户的Windows 11镜像制作终极指南

CrystalFetch&#xff1a;Mac用户的Windows 11镜像制作终极指南 【免费下载链接】CrystalFetch macOS UI for creating Windows installer ISO from UUPDump 项目地址: https://gitcode.com/gh_mirrors/cr/CrystalFetch 在当今多平台协作的时代&#xff0c;Mac用户经常需…

作者头像 李华
网站建设 2026/7/7 7:16:06

35、Linux系统管理与安全指南

Linux系统管理与安全指南 1. Linux系统进程管理与操作 在Linux系统管理中,进程管理是一项重要的任务。以下是常见的进程管理操作及相关命令: - 确定进程PID :若要终止Linux服务器上的 sendmail 进程,可使用 ps -ef | grep sendmail 命令来确定其PID。该命令会列出…

作者头像 李华
网站建设 2026/7/7 12:10:58

MySQL锁机制深度解析

前言在当今互联网软件开发领域&#xff0c;高并发应用层出不穷&#xff0c;而 MySQL 作为最广泛使用的关系型数据库之一&#xff0c;其锁机制对于保障数据一致性和高并发性能起着举足轻重的作用。特别是对于广大互联网软件开发人员而言&#xff0c;深入理解 MySQL 中的锁机制&a…

作者头像 李华