随笔分类 -  Rust

rust cjb语言
摘要:智能指针 Box, RC, RefCell 智能指针是数据结构,表现类似于指针,但也拥有额外的数据结构。 引用和智能指针的区别:引用只是只借用数据的指针,而智能指针则是拥有它们指向的数据。 Box box值是放在堆上,而指向的堆上的数据的指针是留在栈上。 fn main() { // v存在栈上,5 阅读全文
posted @ 2021-12-08 14:17 阿初 阅读(174) 评论(0) 推荐(0) 编辑
摘要:迭代器 迭代器是惰性的,调用方法使用迭代器之前,不会有任何的效果。 每个迭代器都实现了iterator trait,这个 trait 定义在标准库里。 trait Iterator { type Item; // type Item和Self::Item这种用法叫做定义trait的关联类型。这里只定 阅读全文
posted @ 2021-12-06 16:52 阿初 阅读(274) 评论(0) 推荐(0) 编辑
摘要:闭包 创建闭包 fn main() { let use_closure = || { println!("Hello, world!"); }; use_closure() } 语法格式 let func = |函数参数| -> 返回值 {逻辑}; let func = |x: u32| -> u3 阅读全文
posted @ 2021-12-06 15:47 阿初 阅读(127) 评论(0) 推荐(0) 编辑
摘要:阶段性笔记(理解) 引用和借用 泛型 struct trait 引用和借用 引用和借用都有生命周期。引用是作为参数传递给函数的地址。 创建一个变量,借用/引用都是指向同一个内存地址。只不过所有权不一样。 借用&: let b = &3; 引用ref: let ref c: i32 = 2; 这两种类 阅读全文
posted @ 2021-12-02 17:27 阿初 阅读(70) 评论(0) 推荐(0) 编辑
摘要:生命周期 避免悬垂引用。 rust可以提前声明,即声明一个变量但不初始化,因为没有赋值,所以也用不了,rust也不存在空值。 借用检查器 比较作用域来判断所有的借用是否合法。被引用的数据存活时间,必须比引用者的长。 函数中的泛型生命周期 手动设置生命周期,当函数返回一个引用的时候,它不会知道这个引用 阅读全文
posted @ 2021-12-02 10:26 阿初 阅读(279) 评论(0) 推荐(0) 编辑
摘要:Trait Trait告诉rust编译器某种类型具有哪些并且可以与其他类型共享的功能。抽象的定义共享行为。 有点类似继承。 定义一个Trait trait Summary { // 只创建方法,声明签名 fn summarize(&self) -> String; } 在类型实现trait impl 阅读全文
posted @ 2021-12-01 14:23 阿初 阅读(200) 评论(0) 推荐(0) 编辑
摘要:重复代码 提取函数。 fn largest(list: &[i32]) -> i32 { let mut largeNumber = list[0]; for item in list { if *item > largeNumber { largeNumber = *item } } largeN 阅读全文
posted @ 2021-12-01 10:49 阿初 阅读(96) 评论(0) 推荐(0) 编辑
摘要:错误处理 其他语言使用了异常处理来处理错误,但rust里没有。rust把错误分成了可恢复/不可恢复。 可恢复错误 Result<T, E> Result<T, E>枚举类型来处理可恢复错误。 T返回数据的操作类型 E返回错误的操作类型。 Result是与导入模块。使用match去匹配。 匹配不同的错 阅读全文
posted @ 2021-11-30 16:29 阿初 阅读(534) 评论(0) 推荐(0) 编辑
摘要:常用的集合 数组和tuple是存在栈上的,这里写的集合是存储在heap上的,也就是说在运行是存储大小是不定的。 Vector 不定长数组 类型签名: Vec 由标准库提供,可存储多个值,只能存储相同类型的数据,值在内存中连续存放。 创建Vector 当想创建一个不定长的数组时,可以使用Vector。 阅读全文
posted @ 2021-11-29 17:18 阿初 阅读(314) 评论(0) 推荐(0) 编辑
摘要:模块系统 Package 包:构建,测试,共享crate。 Crate 单元包:一个模块树,可以产生一个library或可执行文件。 Module 模块,use:代码组织,作用域,私有路径。 path:为struct, function, module 等项目命名的方式。 Package 包含: 1 阅读全文
posted @ 2021-11-28 20:50 阿初 阅读(90) 评论(0) 推荐(0) 编辑
摘要:枚举 枚举允许我们列举所有可能的值来定义一个类型。 定义枚举 枚举里面的字段被称为变体。 enum IP{ V4, V6, } 枚举值 let fout = IP::V4 将枚举传入函数 enum IP{ V4, V6, } fn main(){ let four = IP::V4; route(f 阅读全文
posted @ 2021-11-28 18:19 阿初 阅读(250) 评论(0) 推荐(0) 编辑
摘要:struct 结构体 自定义的数据类型,为相关联的值命名,打包成有意义的组合。 类似python的dict,但是赋值的时候可以不按顺序。初始化的时候一定要全部赋值完,不能缺少。先要创建结构体,再实例化结构体。 取值时使用点标记法。修改结构体里的值必须要求结构体是可变的 mut。一旦struct的实例 阅读全文
posted @ 2021-11-26 19:35 阿初 阅读(300) 评论(0) 推荐(0) 编辑
摘要:Rust 所有权 无需GC就能保证内存的安全。 函数中借用是因为不需要转移所有权,只需要使用实参的数据。 Stack and Heap 储存数据 在rust里,一个值在栈还是堆上对语言的行为和为什么做这些决定有重大影响。 栈,后进先出,必须拥有已知的固定大小。未知的数据或运行时的大小可能发生改变的数 阅读全文
posted @ 2021-11-25 20:42 阿初 阅读(137) 评论(0) 推荐(0) 编辑
摘要:Rust基础 基础 两个冒号调用静态方法 声明变量的关键字 let,rust里的的变量默认是不可变的(immutable),不可变变量;让变量可修改就加上个 mut let a = 1 let mut a = 1 传参 // 传一个字符串 read_line(guess) // 传一个可变字符串 r 阅读全文
posted @ 2021-11-25 17:09 阿初 阅读(235) 评论(0) 推荐(0) 编辑
摘要:Rust概要 简单的注意点 main函数很特别,它是每个Rust可执行程序最先运行的代码。 缩进是4个空格。 println! 这里个有个 !,代表这个是宏,而不是一个函数。 要写分号; 编译和运行是单独的两步 运行rust程序之前必须先编译,命令:rustc 源文件名 编译成功后会有个二进制文件( 阅读全文
posted @ 2021-11-25 10:48 阿初 阅读(161) 评论(0) 推荐(0) 编辑