首页
chatGPT
关于
友链
其它
统计
更多
壁纸
留言
Search
1
cgroup--(4)cgroup v1和cgroup v2的详细介绍
6,536 阅读
2
修改Linux Kernel defconfig的标准方法
6,449 阅读
3
Android系统之VINTF(1)manifests&compatibility matrices
6,054 阅读
4
使用git生成patch和应用patch
3,570 阅读
5
c语言的__attribute__
3,184 阅读
默认分类
文章收集
学习总结
算法
环境配置
知识点
入门系列
vim
shell
Git
Make
Android
Linux
Linux命令
内存管理
Linux驱动
Language
C++
C
Rust
工具
软件工具
Bug
COMPANY
登录
Search
标签搜索
Rust
shell
Linux
c
uboot
Vim
vintf
Linux驱动
Android
device_tree
git
DEBUG
arm64
链表
数据结构
IDR
内核
ELF
gcc
ARM
adtxl
累计撰写
380
篇文章
累计收到
16
条评论
首页
栏目
默认分类
文章收集
学习总结
算法
环境配置
知识点
入门系列
vim
shell
Git
Make
Android
Linux
Linux命令
内存管理
Linux驱动
Language
C++
C
Rust
工具
软件工具
Bug
COMPANY
页面
chatGPT
关于
友链
其它
统计
壁纸
留言
搜索到
380
篇与
的结果
2024-12-10
Rust程序设计学习笔记(4)--使用结构体组织关联数据
仅是一些笔记,完整的rust学习文档详见https://rustwiki.org/zh-CN/book/title-page.html1. 定义并实例化结构体定义结构体,需要使用 struct 关键字并为整个结构体提供一个名字。结构体的名字需要描述它所组合的数据的意义。接着,在大括号中,定义每一部分数据的名字和类型,我们称为 字段(field)。struct User { active: bool, username: String, email: String, sign_in_count: u64, } 要在定义结构体后使用它,我们可以通过为每个字段指定具体值的方式来创建该结构体的实例。创建一个实例需要以结构体的名字开头,接着在大括号中使用 key: value 键-值对的形式提供字段,其中 key 是字段的名字,value 是需要存储在字段中的数据值。实例中字段的顺序不需要和它们在结构体中声明的顺序一致。换句话说,结构体的定义就像一个类型的通用模板,而实例则会在这个模板中放入特定数据来创建这个类型的值。struct User { active: bool, username: String, email: String, sign_in_count: u64, } fn main() { let mut user1 = User { email: String::from("someone@example.com"), username: String::from("someusername123"), active: true, sign_in_count: 1, }; user1.email = String::from("anotheremail@example.com"); } 使用结构体更新语法从其他实例创建实例使用旧实例的大部分值但改变其部分值来创建一个新的结构体实例通常很有用。这可以通过结构体更新语法(struct update syntax)实现。struct User { active: bool, username: String, email: String, sign_in_count: u64, } fn main() { // --snip-- let user1 = User { email: String::from("someone@example.com"), username: String::from("someusername123"), active: true, sign_in_count: 1, }; let user2 = User { email: String::from("another@example.com"), ..user1 }; } 代码创建了一个新实例 user2,该实例具有不同的 email 值,但 username、 active 和 sign_in_count 字段的值与 user1 相同。..user1 必须放在最后,以指定其余的字段应从 user1 的相应字段中获取其值,但我们可以选择以任何顺序为任意字段指定值,而不用考虑结构体定义中字段的顺序。使用没有命名字段的元组结构体来创建不同的类型也可以定义与元组类似的结构体,称为元组结构体(tuple struct)。元组结构体有着结构体名称提供的含义,但没有具体的字段名,只有字段的类型。当你想给整个元组取一个名字,并使元组成为与其他元组不同的类型时,元组结构体是很有用的,这时像常规结构体那样为每个字段命名就显得多余和形式化了。struct Color(i32, i32, i32); struct Point(i32, i32, i32); fn main() { let black = Color(0, 0, 0); let origin = Point(0, 0, 0); } 通过派生trait增加实用功能增加属性来派生 Debug trait,并使用调试格式打印 Rectangle 实例#[derive(Debug)] struct Rectangle { width: u32, height: u32, } fn main() { let rect1 = Rectangle { width: 30, height: 50, }; println!("rect1 is {:?}", rect1); } 2. 方法语法方法 与函数类似:它们使用 fn 关键字和名称声明,可以拥有参数和返回值,同时包含在某处调用该方法时会执行的代码。不过方法与函数是不同的,因为它们在结构体的上下文中被定义(或者是枚举或 trait 对象的上下文),并且它们第一个参数总是 self,它代表调用该方法的结构体实例。2.1 定义方法#[derive(Debug)] struct Rectangle { width: u32, height: u32, } impl Rectangle { fn area(&self) -> u32 { self.width * self.height } } fn main() { let rect1 = Rectangle { width: 30, height: 50, }; println!( "The area of the rectangle is {} square pixels.", rect1.area() ); } 为了使函数定义于 Rectangle 的上下文中,我们开始了一个 impl 块(impl 是 implementation 的缩写),这个 impl 块中的所有内容都将与 Rectangle 类型相关联。接着将 area 函数移动到 impl 大括号中,并将签名中的第一个(在这里也是唯一一个)参数和函数体中其他地方的对应参数改成 self。&self实际上是 self: &Self 的缩写。在一个 impl 块中,Self 类型是 impl 块的类型的别名。方法的第一个参数必须有一个名为 self 的Self 类型的参数,所以 Rust 让你在第一个参数位置上只用 self 这个名字来缩写。2.2 关联函数所有在 impl 块中定义的函数被称为关联函数(associated function),因为它们与 impl 后面命名的类型相关。我们可以定义不以 self 为第一参数的关联函数(因此不是方法),因为它们并不作用于一个结构体的实例。我们已经使用了一个这样的函数,String::from 函数,它是在 String 类型上定义的。关联函数经常被用作返回一个结构体新实例的构造函数。例如我们可以提供一个关联函数,它接受一个维度参数并且同时作为宽和高,这样可以更轻松的创建一个正方形 Rectangle 而不必指定两次同样的值:#[derive(Debug)] struct Rectangle { width: u32, height: u32, } impl Rectangle { fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size, } } } fn main() { let sq = Rectangle::square(3); } 使用结构体名和 :: 语法来调用这个关联函数:比如 let sq = Rectangle::square(3);。这个方法位于结构体的命名空间中::: 语法用于关联函数和模块创建的命名空间。
2024年12月10日
4 阅读
0 评论
0 点赞
2024-12-10
Rust程序设计学习笔记(3)--认识所有权
仅是一些笔记,完整的rust学习文档详见https://rustwiki.org/zh-CN/book/title-page.html
2024年12月10日
6 阅读
0 评论
0 点赞
2024-12-09
Rust程序设计学习笔记(2)--通用编程概念
仅是一些笔记,完整的rust学习文档详见https://rustwiki.org/zh-CN/book/title-page.html
2024年12月09日
3 阅读
0 评论
0 点赞
2024-11-22
Linux Kernel 之九 详解 virtio-net 源码框架、执行流程
转载自https://blog.csdn.net/ZCShouCSDN/article/details/132361829
2024年11月22日
46 阅读
0 评论
0 点赞
2024-11-09
Rust程序设计学习笔记(1)--环境安装与导览
暂无简介
2024年11月09日
21 阅读
0 评论
0 点赞
2024-11-04
ARMv9--机密计算架构(CCA)深入理解
转载自https://developer.aliyun.com/article/1205005
2024年11月04日
33 阅读
0 评论
0 点赞
2024-10-30
一些信息安全中术语的理解
整理自网络
2024年10月30日
19 阅读
0 评论
0 点赞
2024-10-30
ARM Trusted Firmware分析——镜像签名/加密/生成、解析/解密/验签
转载自https://www.cnblogs.com/arnoldlu/p/14332530.html跟着博主的文章把安全启动早期的工作过一下
2024年10月30日
26 阅读
0 评论
0 点赞
2024-10-29
长安欧尚Z6 idd 搭电启动
长时间不开车的小电瓶可能就亏电了,搭电方式如下:从发动机保险盒搭电,参考如下:
2024年10月29日
67 阅读
0 评论
0 点赞
2024-10-22
Linux - Devicetree规范: 中断和中断映射
转载自https://blog.csdn.net/guoqx/article/details/124241733
2024年10月22日
58 阅读
0 评论
0 点赞
1
2
3
...
38