尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Rust语言学习笔记

Rust语言学习笔记
📅 发布时间:2026/6/18 19:08:57

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

变量部分

变量可以自动推断类型。

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

变量类型用:i32这种在let或者letmut后进行声明。

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

函数部分

函数参数要指定类型,但是在后面指定跟go一样。

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

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

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

控制流

if表达式:

这里的if后面跟的条件必须是bool,不支持默认转。

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

loop表达式:

loop:loop可以返回值,在break后面加对应的值就可以返回。在嵌套循环中可以用循环标签来指定break或者continue某一层,而不用默认最里层。

while:后面加上条件,符合就循环,不符合就跳出。

for:for循环可以对于元组或者数组中的每一个元素执行计算:fortepina...

所有权:

堆:长度可变的栈:长度固定的

所有权是用来垃圾回收的。

string是分配在堆上的,类似于rall,离开作用域,堆上的内存会被自动的释放drop。rust是不存在浅拷贝的,只会移动,之前被拷贝的会失效。同时,赋值之后原来的也会被释放。

深拷贝要用clone。

cpp虽然有RALL但是,主要自己写析构函数,但是rust自己调用drop,cpp原来的指针实效了,但是还是有可能被访问,但是rust在编译阶段会拦截这种行为。

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

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

slice是元组或者数组中一部分值的引用。

结构体

差不多跟cpp,就是赋值的时候要注意,是move,但是是针对于具体某一个元素的操作,比如你move了第一个元素,但是第二个在堆上的还可以正常访问。

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

包、crate

包是一个项目,包含多个crate,crate是最小编译单元,就是一个文件,包含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 一起引入作用域。 子项必须显式引入。

vector、string、hashmap

vector:

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

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

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

遍历用forin

多种类型用枚举加赋值。

string

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

hashmap

Trait

是一种类似于接口的东西,

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

要 use trait 才能调用 trait 方法

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

生命周期注解:指定引用的生命周期,确保多个引用活的一样久。

相关新闻

  • 计算机毕业设计springboot基于Java考研学习平台 基于SpringBoot的Java考研在线学习与资源分享系统 SpringBoot+Java实现的考研备考综合服务平台
  • CPU-Z TV版:轻量级硬件检测工具,完美支持电视遥控操作
  • 3、Kali Linux入门指南:基础操作与命令详解

最新新闻

  • 多维聚合实战:从pandas滚动窗口到业务可解释指标
  • 北京公司注册代办怎么选?2026年合规标准、避坑指南与机构对比盘点 - 互联网科技品牌测评
  • 杭州黄金回收红黑榜 2026 版:避坑黑名单 + 高保值优选门店,上门 / 到店渠道全面对比 - 奢侈品回收评测
  • 风电预测模型可解释性实战:物理约束下的SHAP与LIME应用
  • 口语化买家问句转化 SEO 页面,同步适配传统排名与 AI 摘要引用
  • AI落地失败真相:工作流分层与程序可表达性实战指南

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号