当前位置: 首页 > news >正文

Rust in Action笔记 第三章 复合数据类型

  1. 通过#[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZI50wIh1-1685693144796)(null)]),不带感叹号的#[allow]仅为下一行代码提供属性,属性有多种分类,文中出现的allow属性称为诊断属性(Diagnostics),详见[诊断属性](https://doc.rust-lang.org/reference/attributes/diagnostics.html#lint-check-attributes);诊断属性还包括warnforbiddeprecatedmust_use`等;
  2. 单位类型(unit type)是一个长度为0的元组(zero-length tuple),用一对小括号()表示,当函数没有返回类型时返回(),或者函数以分号;结尾的时候也是隐式返回了()类型;
  3. 返回值是感叹号!时表示永不返回,感叹号在这里可以看做是Never类型,按时该函数要么永不返回,要么必定会crash;
  4. 3.2使用struct关键字来定义一个复杂的类型,使用了derive关键字来让编译器生成某些属性,出现了vec!宏来快速初始化一个Vec<u8>类型;
  5. 图3.1给出了一个自定义结构的内存分布图,从图中可以看出String类型由3部分组成,第一部分是(ptr)指向堆的指针,第二部分(size)表示大小,即string的长度,第三部分(capacity)表示容量,表示堆上为这个string分配的最大容量,如果后续string继续增大,可能会重新在堆上分配空间,Vec<u8>类型跟String有类似的三个部分;
    3.1
  6. 为一个新的结构起一个名字有两种方式,一种是struct关键字,一种是type关键字,type通常用于为某一种类型起别名(alias),或者在特征trait中制定关联类型(associate type),详见associated-items;
  7. listing 3.3给了一系列文件IO的api,其中String::from_utf8_lossy(&buffer)可以把Vec<u8>类型转换成String类型;
  8. 3.3节阐述了rust与其他语言中类的不同,如图所示,大部分支持继承(inheritance)的语言会把类的方法与成员放在一起,而rust是分开实现的,因而rust的类并不支持面向对象语言的继承属性;3.2
  9. 84页注解简单探讨了一下函数(function)和方法(method)的区别,作者认为函数是纯粹的(pure),它的行为仅由它的参数决定,而方法通常跟类绑定,第一个参数是self或者相应的借用,然而也有例外,例如实现了静态方法(static method)的类的第一个参数就不是self
  10. 3.4节出现了一种用到unsafe关键字的场景,也就是修改静态全局变量的时候必须要用unsafe包裹,避免多个地方同时修改一个全局变量,全局变量根据习惯要全部大写;
  11. constlet的区别,let绑定的对象具有内部可变性,例如std::sync::Arcstd::rc::Rc,通过clone等操作会改变其内部引用计数的值,在编译器的角度来看,let更强调的是为某一块数据起别名(aliasing)而不是它的不可变性(immutability);
  12. 3.4和3.5节主要讲了用enum来处理错误类型,比较简单;
  13. 实现PartialEq特征的类可以用==来进行比较;实现Display特征的类可以在println!中用{}结构化输出,Display特征要求实现fmt(&self, f: &mut fmt::Formatter)方法,实现过程中可以使用write!宏来简化实现过程;
  14. 3.7节讲了类和成员的可见性,默认都是Private,给类加了pub关键字表示该类是public,但是其成员还是private,如果需要成员也是可见的,需要在成员前面加上pub;
  15. 3.8节讲了给代码加文档的方法,///仅为之后的代码作注解,而//!是为整个模块作注解,可以横向比较前面的#![allow]#[allow],生成注解的方式是rustdoc xx.rs,跟之前的cargo doc类似,不过cargo是针对整个项目生成文档;
  16. ///生成的文档支持markdown语法
http://www.lryc.cn/news/91270.html

相关文章:

  • 算法基础学习笔记——⑬高斯消元\组合计数\容斥原理
  • 渗透测试辅助工具箱
  • chatgpt赋能python:Python后退命令:如何让你的程序退回到之前的状态
  • OJ练习第127题——统计范围内的元音字符串数
  • 图片优化: CssSprites与Base64编码
  • JavaScript中的Map、WeakMap和Object的区别
  • 华为OD机试之打印机队列(Java源码)
  • 分享一个国内免费的ChatGPT网站,手机电脑通用,免费无限制,支持AI绘画
  • 【面向对象编程1】——类和对象——如桃花来
  • chat聊天系统消息消费时遇到的问题及优化思路(二)
  • js正则中的match()
  • Apache 配置和应用
  • 实现PyTorch/ONNX自定义节点操作的TensorRT部署
  • Shamir 秘密共享、GMW和BGW方案
  • Day56【动态规划】583.两个字符串的删除操作、72.编辑距离
  • Arnold图像置乱的MATLAB实现
  • ASP.NET Core
  • javascript基础二十二:举例说明你对尾递归的理解,有哪些应用场景
  • hive中如何计算字符串中表达式
  • 如何将maven项目改为springboot项目?
  • Java与查找算法(5):哈希查找
  • Vercel部署个人博客
  • 【论文阅读】An Object SLAM Framework for Association, Mapping, and High-Level Tasks
  • 《metasploit渗透测试魔鬼训练营》学习笔记第六章--客户端渗透
  • 华为OD机试真题 Java 实现【Linux 发行版的数量】【2023Q1 100分】
  • VMware ESXi 8.0U1a macOS Unlocker OEM BIOS (标准版和厂商定制版)
  • Effective STL_读书笔记
  • 通过yum:mysql5.6-msyql5.7-mysql8.0升级之路
  • C语言数据存储 — 整型篇
  • 高级Excel功能教程_编程入门自学教程_菜鸟教程-免费教程分享