10 2023 档案

摘要:编写自动化测试 编写和运行测试 一个测试就是一个函数,用于验证非测试代码的功能是否和预期一致。 测试函数体通常执行3个操作(3A): Arrange:准备数据/状态 Act:运行被测代码 Assert:断言结果 测试函数: 测试函数需要使用test属性(attribute)进行标注,Attribut 阅读全文
posted @ 2023-10-31 00:43 00lab 阅读(12) 评论(0) 推荐(0) 编辑
摘要:生命周期 生命周期应是rust语言最与众不同的概念。 rust的每个引用都有自己的生命周期。 生命周期:引用保持有效的作用域。 大多数情况:生命周期是隐式的、可被推断的。 当引用的生命周期可能以不同的方式相互关联时,需要手动标注生命周期。 生命周期存在的目的:避免悬垂引用(dangling refe 阅读全文
posted @ 2023-10-27 00:37 00lab 阅读(10) 评论(0) 推荐(0) 编辑
摘要:Trait Trait告诉Rust编译器某些类型具有哪些并可与其它类型共享的功能。 Trait:抽象的定义共享行为。 Trait bounds(约束):泛型类型参数指定为实现了特定行为的类型。 Trait与其它语言的接口(interface)类似,但有些区别。 定义一个Trait Trait的定义: 阅读全文
posted @ 2023-10-26 21:03 00lab 阅读(7) 评论(0) 推荐(0) 编辑
摘要:提取函数消除重复代码 fn get_largest(list: &[i32]) -> i32 { let mut max_num = list[0]; for &i in list { if i > max_num { max_num = i; } } max_num } fn main() { l 阅读全文
posted @ 2023-10-26 00:47 00lab 阅读(2) 评论(0) 推荐(0) 编辑
摘要:错误处理 不可恢复的错误与panic!宏 rust语言的错误处理: rust语言具有较高的可靠性,有完备的错误处理机制,大部分情况下,能在编译是提示错误,并处理完错误。 rust没有类似异常处理的机制 错误的分类: 可恢复错误:使用Result<T, E>机制,如文件未找到,可再次尝试。 不可恢复: 阅读全文
posted @ 2023-10-25 17:39 00lab 阅读(119) 评论(0) 推荐(0) 编辑
摘要:HashMap<K, V> 键值对的形式存储数据,一个键(key)对应一个值(value)。适用于通过K(任何类型)来搜索数据,而不是通过下标索引的场景。 Hash函数:决定如何在内存中存放K和V。 创建HashMap new函数创建 创建空HashMap:new()函数。 添加数据:insert( 阅读全文
posted @ 2023-10-25 15:35 00lab 阅读(58) 评论(0) 推荐(0) 编辑
摘要:rust的字符串 字符串简介 字符串:UTF-8格式,byte的集合,提供了一些解析byte为文本的方法。 rust的核心语言层面,只有一个字符串类型:字符串切片str(或&str)。 字符串切片:对存储在其他地方、UTF-8编码的字符串的引用 其中字符串字面值,存储在二进制文件中,也是字符串切片。 阅读全文
posted @ 2023-10-25 01:34 00lab 阅读(18) 评论(0) 推荐(0) 编辑
摘要:常用集合——vector 集合的数据存放在堆里,无需在编译时确定大小。 使用vector vector可存放多个值,Vec<T>叫做vector。 由标准库提供 可存储多个值 只能存储相同类型的数据 值在内存中连续存放 1)创建vector: 使用Vec::new函数 let v: Vec<i32> 阅读全文
posted @ 2023-10-24 16:31 00lab 阅读(17) 评论(0) 推荐(0) 编辑
摘要:use关键字 可用use关键字将 路径导入到作用域内,导入的内容仍然遵循私有性原则。可使用相对路径和绝对路径的方式。 mod modu1 { pub mod modu2 { pub fn test_func1() {} fn test_private() {} } } use crate::modu 阅读全文
posted @ 2023-10-23 13:12 00lab 阅读(11) 评论(0) 推荐(0) 编辑
摘要:rust的模块系统 代码组织包括:哪些细节对外暴露,哪些细节私有,作用域哪些名称有效等。 rust的模块系统: 最上层 Package(包):Cargo的特性,构建、测试、共享crate。 第二层 Crate(单元包):一个模块树,可产生一个Library或可执行文件。 第三层Module(模块)、 阅读全文
posted @ 2023-10-22 00:09 00lab 阅读(94) 评论(0) 推荐(0) 编辑
摘要:match 强大的控制流运算符。 允许一个值和一系列模式进行匹配,并执行匹配的模式对于的代码 模式可为字面值、变量名、通配符... 比如下边例子用于匹配返回具体值 enum Color { Black, White, Red, } fn value_Color(color: Color) -> u3 阅读全文
posted @ 2023-10-20 00:36 00lab 阅读(16) 评论(0) 推荐(0) 编辑
摘要:枚举 枚举允许列举所有可能的值来定义一个类型。 定义枚举 enum Color { RED, BLUE, } fn main() { let red = Color::RED; // 定义一个枚举值 test_enum(red); test_enum(Color::BLUE); } fn test_ 阅读全文
posted @ 2023-10-19 00:57 00lab 阅读(7) 评论(0) 推荐(0) 编辑
摘要:rust的struct 定义和实例化struct 使用struct关键字,并对整个struct命名。 在花括号内,对所有字段(Field)定义名称和类型。 创建struct实例:为每个字段指定具体值,无需按声明顺序进行指定。 struct User { name: String, id: u64, 阅读全文
posted @ 2023-10-18 11:27 00lab 阅读(28) 评论(0) 推荐(0) 编辑
摘要:rust的切片 rust另一种不持有所有权的数据类型:切片(slice) 从一个例子开始:实现一个函数,输入一字符串,返回该字符串第一个单词,如果没空格,则返回整个字符串。 第一种实现,先返回找到的第一个空格的位置 fn main() { let s = String::from("hello wo 阅读全文
posted @ 2023-10-17 00:57 00lab 阅读(36) 评论(0) 推荐(0) 编辑
摘要:rust的引用和借用 fn main() { let s1 = String::from("hello"); let len = test_func(&s1); println!("{} {}", s1, len); } fn test_func(s: &String) -> usize { s.l 阅读全文
posted @ 2023-10-14 01:34 00lab 阅读(23) 评论(0) 推荐(0) 编辑
摘要:这些函数都在stdio.h里,不过不同系统不同库,有些函数不一定提供。 1. sprintf 函数原型: int sprintf (char *str, const char *format, ...); extern int sprintf (char *__restrict __s, const 阅读全文
posted @ 2023-10-13 20:41 00lab 阅读(522) 评论(0) 推荐(0) 编辑
摘要:所有权 所有权是rust最独特、核心的特性,使得rust无GC也可保证内存安全。 其他语言都有在运行时管理自身内存的机制,比如GC,或者程序员手动申请和释放。 rust则采用了第三种方式:所有权 内存通过一所有权系统来管理,含一组编译时用于检测的规则。 当程序运行时,所有权不会影响程序速度。 sta 阅读全文
posted @ 2023-10-13 17:35 00lab 阅读(5) 评论(0) 推荐(0) 编辑
摘要:控制流表达式 if表达式 if表达式用于根据条件执行不同代码分支,条件必须是bool类型。 if表达式中,与条件关联的代码块叫分支(arm)。 可选择是否加上else表达式。 fn main() { let num = 3; if num < 6 { println!("arm num < 6"); 阅读全文
posted @ 2023-10-13 00:40 00lab 阅读(4) 评论(0) 推荐(0) 编辑
摘要:rust的函数 声明函数使用fn关键字,针对函数和变量名,rust使用snake case命名规范,即所有字母小写,单词间用下划线分开。 fn main() { test_function(); } fn test_function() { println!("test func"); } rust 阅读全文
posted @ 2023-10-12 20:38 00lab 阅读(29) 评论(0) 推荐(0) 编辑
摘要:数据类型 有 标量和复合类型 rust是静态编译语言,需在编译时知道所有变量的类型。 1)通常基于变量上下文使用的值,编译器能推断出具体类型。 2)若可能的类型存在多种,则需手动标注,如下例子。 let d: u32 = "56".parse().expect("not a num"); // 因为 阅读全文
posted @ 2023-10-12 00:36 00lab 阅读(20) 评论(0) 推荐(0) 编辑
摘要:rust定义变量 let关键字 用于声明变量:let (mut) 变量名 变量值是否改变 默认变量值不可变(Immutable),在声明变量时加上mut才为可变变量。 let x = 5; x = 6; let mut y = 6; y = 8; let mut y: u32 = 9; 第二行编译报 阅读全文
posted @ 2023-10-11 15:17 00lab 阅读(9) 评论(0) 推荐(0) 编辑
摘要:在Cargo.toml中配置依赖库(在rust里叫crate),cargo会自动从配置的库网址中下载,可配如下国内源 配置rust的国内源: linux下: vim ~/.cargo/config windows:c盘/用户/用户名/.cargo/config 如果没有config文件,创建一个即可 阅读全文
posted @ 2023-10-09 17:26 00lab 阅读(902) 评论(0) 推荐(0) 编辑
摘要:rust的官网 https://www.rust-lang.org/ 1. 安装、卸载rust windows环境 下载windows安装包 双击后进入命令行安装,按照提示输入数字选项安装即可。 如果系统中缺少c++的库,会提示先安装visual studio。 linux or MAC: curl 阅读全文
posted @ 2023-10-09 16:16 00lab 阅读(17) 评论(0) 推荐(0) 编辑