Rust学习记录--C0 总目录

C1 Hello Rust/Cargo

  • 1.1 下载安装
  • 1.2 编写Rust程序
  • 1.3 Cargo
    • 1.3.1 使用Cargo创建项目
    • 1.3.2 如何使用Cargo

C2 Rust猜数游戏


C3 Rust通用编程概念

  • 3.1 变量与可变性

    • 3.1.1 变量
    • 3.1.2 常量
      • 3.1.2.1 常量constant
      • 3.1.2.2 隐藏 shadowing
  • 3.2 数据类型

    • 3.2.1 标量类型
    • 3.2.2 复合类型
      • 3.2.2.1 元组(Tuple)
      • 3.2.2.2 数组
  • 3.3 函数

    • 3.3.1 声明函数
    • 3.3.2 函数参数
    • 3.3.3 语句和表达式
    • 3.3.4 函数的返回值
  • 3.4 注释

  • 3.5 控制流

    • 3.5.1 if else表达式
    • 3.5.2 循环
      • 3.5.2.1 loop循环
      • 3.5.2.2 while循环
      • 3.5.2.3 for 循环遍历集合

C4 Rust所有权

  • 4.1 所有权

    • 4.1.1 什么是所有权
    • 4.1.2 栈内存stack和堆内存heap
    • 4.1.3 所有权存在的原因
  • 4.2 所有权规则/内存与分配

    • 4.2.1 所有权规则
    • 4.2.2 变量作用域
    • 4.2.3 String类型
  • 4.3 所有权与函数

  • 4.4 引用与借用

    • 4.4.1 引用
    • 4.4.2 借用
    • 4.4.3 可变引用
      • 4.4.3.1 可变引用的限制
    • 4.4.4 悬空引用(Dangling References)
    • 4.4.5 引用的规则
  • 4.5 切片

    • 4.5.1 字符串切片
    • 4.5.2 其他类型的切片

C5 Rust struct

  • 5.1 定义和实例化struct
    • 5.1.1 定义struct
    • 5.1.2 实例化struct
    • 5.1.3 取得struct里面的某个值
    • 5.1.4 注意
    • 5.1.5 struct可以作为函数的返回值
    • 5.1.6 字段初始化简写
    • 5.1.7 struct更新语法
    • 5.1.8 Tuple struct
    • 5.1.9 Unit-Like Struct(没有任何字段)
    • 5.1.10 struct数据的所有权
  • 5.2 struct 例子
    • 5.2.1 计算长方形面积的实现
    • 5.2.2 输出一个struct
  • 5.3 struct 方法
    • 5.3.1 方法
    • 5.3.2 关联函数
    • 5.3.3 多个impl块

C6 枚举与模式匹配

  • 6.1 定义枚举
    • 6.1.1 如何获取枚举值
    • 6.1.2 枚举变体
    • 6.1.3 将数据附件到枚举的变体中(注意:这和C#中的枚举不太一样)
    • 6.1.4 标准库中的IpAddr
    • 6.1.5 一些例子
    • 6.1.6 为枚举定义方法
  • 6.2 Option枚举
    • 6.2.1 Option枚举
    • 6.2.2 Option的标准库定义
    • 6.2.3 Option<T>比Null好在哪
  • 6.3 控制流运算符-match
    • 6.3.1 match的定义
    • 6.3.2 匹配Option<T>
  • 6.4 特殊的match: if let

C7 Package, Crate, Module

  • 7.1 Package, Crate, Module
    • 7.1.1 ChatGPT总结版
    • 7.1.2 Package(包)------Cargo 管理的项目单位
    • 7.1.3 Crate(编译单元)------Rust 的核心单位
    • 7.1.4 Module(模块)------代码组织 & 命名空间
      • 7.1.4.1 内联 module
      • 7.1.4.2 文件 module(最常用)
      • 7.1.4.3 目录 module(module tree)
    • 7.1.5 可见性:pub 是边界
    • 7.1.6 模块树
      • 7.1.6.1 记得区分模块树和文件树
      • 7.1.6.2 编译器构建模块树的三步流程
      • 7.1.6.3 完整例子:从文件到模块树
      • 7.1.6.4 mod 和"内联模块"是完全一样的
      • 7.1.6.5 mod 不是 import(这是最常见误解)
      • 7.1.6.6 pub 决定"路能不能走通"
  • 7.2 路径Path
    • 7.2.1 绝对路径(absolute path)
    • 7.2.2 相对路径(relative path)
    • 7.2.3 path 在不同地方,起点不一样
    • 7.2.4 常见的path写法总结
  • 7.3 use 关键字--"把路径搬到当前作用域"
    • 7.3.1 为什么需要use
    • 7.3.2 use 到底"引入"了什么?
  • 7.4 将模块内容放到其他文件

C8 常用的集合

  • 8.1 Vector
    • 8.1.1 特性
    • 8.1.2 创建Vector
      • 8.1.2.1 创建一个空的vector
      • 8.1.2.2 指定初始值的方式创建Vector
    • 8.1.3 更新Vector
    • 8.1.3.1 添加元素
    • 8.1.4 删除Vector
    • 8.1.5 读取Vector的元素
    • 8.1.6 所有权和借用规则
    • 8.1.7 遍历Vector中的值
    • 8.1.8 使用enum来存储多种数据类型并且存在Vector中
  • 8.2 String
    • 8.2.1 String的难点
    • 8.2.2 字符串是什么
    • 8.2.3 创建String
    • 8.2.4 更新String
    • 8.2.5 String的内部表示
    • 8.2.6 切割String
    • 8.2.7 遍历String
  • 8.3 HashMap
    • 8.3.1 特性
    • 8.3.2 创建
      • 8.3.2.1 常见的创建方法:new
      • 8.3.2.2 特殊的创建方法:collect
    • 8.3.3 所有权
    • 8.3.4 访问HashMap中得值
    • 8.3.5 遍历HashMap
    • 8.3.6 更新HashMap
      • 8.3.6.1 K已经存在,替换现有的V
      • 8.3.6.2 只有K不存在任何V的情况下,才插入V
      • 8.3.6.3 基于现有V更新V
    • 8.3.7 hash函数

C9 错误处理

  • 9.1 panic! 不可恢复的错误
  • 9.2 Result枚举类型
    • 9.2.1 定义
    • 9.2.2 如何处理Result的结果:match表达式
    • 9.2.3 unwrap 取代match
    • 9.2.4 except:可以指定信息的unwrap
  • 9.3 传播错误
    • 9.3.1传播错误: 将错误传给调用者
    • 9.3.2 ?运算符
    • 9.3.3 ?与from函数
    • 9.3.4 ?只能用于返回Result函数
  • 9.4 什么时候应该使用panic!
    • 9.4.1 总体原则

C10 泛型,Trait,生命周期

  • 10.1 提取函数以消除重复代码
    • 10.1.1 例子
    • 10.1.2疑问:为什么 if item > largest { 这里使用的是item而不是&item?
  • 10.2 泛型
    • 10.2.1 定义
    • 10.2.2 函数定义中的泛型
    • 10.2.3 struct结构体中 定义的泛型
    • 10.2.4 enum枚举类型中 ->主要让枚举的变体持有泛型数据
    • 10.2.5 方法定义中的泛型
    • 10.2.6 泛型代码的性能
  • 10.3 Trait
    • 10.3.1 功能
    • 10.3.2 定义一个trait
    • 10.3.3 在类型上实现trait
      • 10.3.3.1 一般写法
      • 10.3.3.2 默认实现
      • 10.3.3.3 默认实现的方法可以调用trait中其他的方法
    • 10.3.4 trait作为参数
      • 10.3.4.1 impl Trait 语法:适用于简单情况
      • 10.3.4.2 Trait bound 语法:适用于复杂情况
      • 10.3.4.3 使用+指定多个Trait bound
      • 10.3.4.4 Trait bound 使用where子句
    • 10.3.5 实现Trait作为返回类型
      • 10.3.5.1 impl Trait 语法
      • 10.3.5.2 使用Trait Bound
      • 10.3.5.2 使用Trait Bound有条件的实现方法
  • 10.4 生命周期
    • 10.4.1 生命周期的简单定义
    • 10.4.2 避免悬垂引用(dangling reference)
    • 10.4.3 函数中的泛型生命周期
    • 10.4.4 生命周期标注语法
    • 10.4.5 函数签名中的生命周期标注
    • 10.4.6 深入理解生命周期
    • 10.4.7 struct定义中的生命周期标注
    • 10.4.8 生命周期的省略规则
    • 10.4.9 结构体添加生命周期标注
    • 10.4.10 静态生命周期

C11 编写自动化测试

  • 11.1 编写和运行测试
    • 11.1.1 测试函数
    • 11.1.2 解剖测试函数
    • 11.1.3 运行测试
  • 11.2 断言(Assert)
    • 11.2.1 使用assert! 宏检查测试结果
    • 11.2.2 使用assert_eq!和assert_ne!测试相等性
  • 11.3 自定义错误消息
    • 11.3.1 添加自定义错误消息
  • 11.4 用should_panic检查恐慌
    • 11.4.1 验证错误处理的情况 should_panic
    • 11.4.2 让 should_panic更精确,expected
  • 11.5 在测试中使用Result<T,E>
  • 11.6 控制测试运行
    • 11.6.1 控制测试如何运行
    • 11.6.2 并行/连续运行测试
    • 11.6.3 --test-threads参数
    • 11.6.4 显式函数输出
  • 11.7 按名称运行测试
    • 11.7.1 按名称运行测试的子集
  • 11.8 忽略测试
  • 11.9 集成测试
    • 11.9.1 测试的分类
    • 11.9.2 单元测试
    • 11.9.3 集成测试
      • 11.9.3.1 运行集成测试
      • 11.9.3.2 运行指定的集成测试

相关推荐
蕨蕨学AI2 小时前
【Wolfram语言】46 音频与视频
开发语言·wolfram
sjg200104142 小时前
GoFrame学习随便记2
windows·学习
Microsoft Word2 小时前
HashMap面试题总结
java·开发语言
qq_344115222 小时前
WinForm学习笔记一(建立项目)
笔记·学习
小呀小萝卜儿2 小时前
2026-01-14 学习记录--LLM-申请Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例)
学习·语言模型·llama
走在路上的菜鸟2 小时前
Android学Flutter学习笔记 第五节 Android视角认知Flutter(插件plugins)
android·学习·flutter
ekkcole2 小时前
java实现对excel文件合并单元格(只针对文件)
java·开发语言·excel
lihao lihao2 小时前
C++ set和map
开发语言·c++·算法
小陈phd2 小时前
langGraph从入门到精通(三)——基于LangGraph的智能问答系统开发:Python单代理架构实战
开发语言·python·架构