
rust基础
文章平均质量分 65
1.用表格学习rust基础 清晰高效
2.一些难懂的概念 用比喻的方式 方便更好理解
simper_zxb
1.喜欢用表格学习
2.持续学习更新编程中新的技术
3.关注我一起来学习进步吧
每天10.30-11 学习rust
展开
-
【rust学习】rust基础知识清单详情(全)
unwrap() 方法会检查 Result,如果是 Ok,它会返回里面的值(在这个例子中是锁住的计数器),如果是 Err,程序将会 panic(即异常终止).map(|url| tokio::spawn(download_data(url))) //map方法遍历urls,每个url调用tokio::spawn启动一个新的异步任务。fn call_fn(f: F) where F: Fn() { //:泛型参数的声明 where F:Fn() F必须实现Fn() trait。原创 2024-09-30 11:11:36 · 1350 阅读 · 0 评论 -
rust学习_rust基础知识
rust基础学完了,对照表格复习下基础知识点吧。如何使用 tokio::spawn 启动新的异步任务。如何使用 tokio::join!UnsafeCell是什么 如何使用。如何更新hashMap中已经存在的元素。RefCell是什么 如何使用。如何使用结构体更新语法创建新的实例。如何使用map和filter创建。如何访问hashMap中的元素。Cell是什么 如何使用。闭包如何使用闭包外的环境变量。Box是什么 如何使用。Arc是什么 如何使用。原创 2024-09-27 14:04:26 · 452 阅读 · 0 评论 -
rust学习_rust安装 运行 以及cargo解释
1.执行build的时候,可以带参数 cargon build --release。1.执行 cargon run会先自动执行 cargon build。2.为什么 cargon run可以 build,还要先 build。3.通过 cargo test 命令来运行项目的单元测试。2.通过 cargo new命令快速创建项目。1.通过cargo.toml 文件管理依赖项。1.项目管理:通过cargo 构建 运行 测试项目。1.cargon build:编译。2.cargon run 运行。原创 2024-09-26 11:01:59 · 674 阅读 · 0 评论 -
rust学习_基础语法_数据类型_注释
3.可变字符串 let string: String = String::from("world") //可变字符串。1.定义元组 let tuple_example = (10, "hello", 3.14)2.字符串切片 let s: &str = "hello" //字符串切片。1.单个字符 let c:char = 'a' //单个字符。1.println!3.定义可变数组 let mut a = [1,2,3]1.定义数组 let a =[1,2,3,4,5]原创 2024-09-26 10:59:51 · 351 阅读 · 0 评论 -
rust学习_条件语句和循环
if <condition> {block 1} else { block 2 } block1和block2是函数体表达式。:用于处理模式匹配,它允许你将一个特定的模式与一个值进行比较,如果匹配,则执行对应的代码块。2.loop {} 会一直执行 直到遇到break。("值为:{}",i)if number {} 会报错。rust中条件表达式必须是bool类型。//通过下标访问数组。原创 2024-09-24 16:21:12 · 172 阅读 · 0 评论 -
rust学习_迭代器
/ println!// 下面的代码会导致编译错误,因为 `vec` 已经被 `into_iter` 消耗了。//fold:将迭代器中的元素累积成一个单一的值。// 链式调用:筛选出偶数,然后对每个元素乘以 2,最后收集到一个 Vec 中。2.创建可变借用迭代器(允许在遍历过程中修改集合元素 )// 创建一个迭代器,对每个元素乘以 2。// 创建一个迭代器,筛选出偶数。// 使用 fold 计算总和。:将迭代器中的元素收集到一个集合中。3.迭代器的链式调用。原创 2024-09-24 09:31:48 · 391 阅读 · 0 评论 -
rust学习_闭包
fn call_fn(f: F) where F: Fn() { //:泛型参数的声明 where F:Fn() F必须实现Fn() trait。这些变量的所有权会被移动到闭包中,因此在闭包外部不能再使用这些变量。("{}",s ) //这行代码会报错,因为s的所有权已经转到了闭包。5.获取所有权:获取到外部变量的使用权后,闭包可以访问该变量,外部不能访问。("{}",s ) //move:获取变量的。1.Fn:表示闭包可以多次被调用 每次调用都会借用环境中的变量。原创 2024-09-23 09:28:07 · 816 阅读 · 0 评论 -
rust学习_所有权
/上面函数中的my_list所有权已经转移到了这里的my_list 所以上面函数打印my list时会报错。1.当一个函数返回一个东西时,如果这个东西是小的(比如数字,布尔),那么函数就像在复印一张纸,给你一张复印件,它还留着原来那张纸。2.但是如果这个东西比较大(比如一段文件,一个列表),那么函数就直接把东西给了你了,自己不留着,你获取了这个东西的所有权。在give_away_list函数内部再次访问 my_list时会报错,因为my_list的所有权已经给了my_list。//a给了b a无效了。原创 2024-09-22 08:42:16 · 305 阅读 · 0 评论 -
rust学习_切片
就像一个万能的容器,不管你放进去几个苹果,它都能装得下。不需要为每个苹果数量准备一个专门的容器。2.切片长度是固定的,一旦创建,其长度不变(和golang不同)1.字符串切片:对String类型的引用 如 &str。2.数组切片:对数组或向量的引用 如 &[i32]first() 返回切片第一个元素的引用。is_empty() 检查切片是否为空。2.切片让函数能接受不同长度的数据序列。iter() 返回切片的迭代器。1.切片不拥有数据 只是对数据的引用。len() 返回切片的长度。原创 2024-09-06 11:20:35 · 203 阅读 · 0 评论 -
rust学习_结构体
("书架上有:{} 和 {}", bookshelf.book1, bookshelf.book2);2.结构体方法的第一个参数是self 可以是self &self &mut self。假如你有一个现有结构体,并且想创建一个新的实例,但只需要更改其中一部分,就可以使用结构体更新语法。2.赋值和转移, 当你把这个书架(结构体实例)给了别人,别人获得了这个书架和这个书架。1.创建结构体时,就相当于书架上上了新书,这些新书(字段)属于这个书架。// 使用结构体更新语法创建新的实例。原创 2024-09-21 06:48:00 · 948 阅读 · 0 评论 -
rust学习_特性
2.如果你想学习该技能(继承该特性),就得学习该技能中的所有方法(实现该特性中的所有方法)1.该技能中有 默认方法, 是不需要你学习的。只要你学习该技能,也就学习了这些默认方法。2. 学习了该技能(继承了该特性),就可以直接调用它的默认方法(不用实现也可以)一个函数返回实现某个特性的参数,则可以直接调用该函数 使用某个特性中的方法。1.把特性比成是一个技能,该技能中包含了 学习该技能用到的几个方法。一个函数定义了参数,是某个特性。只有实现该特性 才能调用这个函数。使用该特性的默认方法。原创 2024-09-11 16:09:10 · 267 阅读 · 0 评论 -
rust学习_生命周期
比喻: 1.有一个房间放有多个保险箱(每个保险箱是一个结构体),这个房间里的保险箱钥匙的有效期(结构体字段)必须保留到房间钥匙的有效期。你开车进了一个临时停车场(函数),车辆(数据)可以进来,但是当停车场关闭(函数结束),所有车辆必须离开(数据清理)所有权:你买了一个二手车 可以随用使用,也可以卖掉,完全由你控制。借用:你借用了朋友的车,但是车还是朋友的,你用完要还给他。2.标签:给引用添加 生命周期注释。比喻:给钥匙上贴了一个标签,写着只能周一到周五使用。1.钥匙:一个变量的引用。原创 2024-09-12 15:23:49 · 203 阅读 · 0 评论 -
rust学习_文件与IO
rust 文件与io原创 2024-09-13 11:02:40 · 502 阅读 · 0 评论 -
rust学习_面向对象
/ 通过Library实例直接调用Book实例的print_details方法。// 使用Book实例来创建Library实例。// 泛型函数,接受实现了 UserBehavior Trait 的引用。//5. main函数中使用library和book。//3.liabrary用book实例。// Book自己的方法。// 创建一个Book实例。/ / 定义一个 Trait,描述用户的基本行为。//4.实现library的构造函数。//1.定义Book结构体。//2.Book的方法。原创 2024-09-16 21:17:34 · 1191 阅读 · 0 评论 -
rust学习_并发编程
想象一下,你有一个特殊的计数器(就像一个可以计数的魔法盒子),这个计数器放在一个保险箱里,这样只有拥有钥匙的人才能打开它并改变里面的数字。在循环内部,每个朋友都获得了一个计数器副本的遥控器(Arc::clone(&counter)),并且通过 thread::spawn 创建了一个新的线程。然后,使用 Arc(原子引用计数)来创建这个计数器的一个安全副本,这样多个朋友(线程)都可以拥有这个计数器的引用,而不会担心数据的安全问题。//这个盒子(handles)目前是空的,但它是专门用来存放“句柄”的。原创 2024-09-17 10:49:30 · 1481 阅读 · 0 评论 -
rust学习_智能指针
概念:是 Cell<T> 的基础,它允许你修改任何类型的值,但使用它时必须非常小心,因为它绕过了 Rust 的所有权和生命周期系统,可能会导致不安全的行为。比喻:假设你和你的朋友都想读同一本书,但是你们不想每个人都购买,于是你们决定一起买一本。但是,你发现了一个秘密房间(比喻:想象你有一块橡皮擦,你可以在任何时候使用它擦掉写下的字,即使书已经在别人手上。比喻:想象你有一个魔法盒子,你可以随时修改里面的东西,但如果你不小心,可能会引发灾难。),在这个房间里,你可以自由地在书上做笔记,只要没有人发现。原创 2024-09-19 09:49:12 · 364 阅读 · 0 评论 -
rust学习_宏
[proc_macro_derive(Counter)] //标记表明这是一个过程宏 用于派生(derive)宏,并且它的关联的宏的名称是Counter。#[derive(Counter)] //告诉 Rust 编译器使用我们定义的 Counter 过程宏来为 MyStruct 结构体生成代码。就是一个填空题,你只需要填两个数字,它就会帮你生成一个if语句来比较两个数字,并返回较大的那个。// 返回生成的代码 将生成的代码转换回 TokenStream 并返回它。原创 2024-09-18 09:42:40 · 426 阅读 · 0 评论 -
rust学习_异步编程
map(|url| tokio::spawn(download_data(url))) //map方法遍历urls,每个url调用tokio::spawn启动一个新的异步任务。while let Some(message) = messages.next().await { //每次接收到一条消息,就可以立即处理这条消息。1.异步函数:使用async关键字定义一个异步函数,异步函数返回一个实现了Future特性的类型,这个Feature类型代表一个可能还未完成的计算。("任务出错: {}", e),原创 2024-09-20 10:03:53 · 992 阅读 · 0 评论