当前位置: 首页 > 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语法

相关文章:

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

通过#[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZI50wIh1-1685693144796)(null)]&#xff09;&#xff0c;不带感叹号的#[allow]仅为下一行代码提供属性&#xff0c;属性有多种分类&#xff0c;文中出现的allow属性称为诊断属性&#xff08;Diag…...

算法基础学习笔记——⑬高斯消元\组合计数\容斥原理

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨高斯消元 ✨组合计数 &#x1f353;通过预处理逆元的方式求组合数: &#x1f353;Lucas定理: &#x1f353;分解质因数法求组合数&#xff1a; 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需…...

渗透测试辅助工具箱

0x01 说明 渗透测试辅助工具箱 运行条件&#xff1a;jdk8 双击即可运行 反弹shell&#xff0c;命令生成器&#xff0c;自动编码&#xff0c;输入对应IP端口即可&#xff0c;实现一劳永逸&#xff0c;集成一些小工具&#xff0c;辅助渗透&#xff0c;提高效率 输入框说明 L…...

chatgpt赋能python:Python后退命令:如何让你的程序退回到之前的状态

Python后退命令&#xff1a;如何让你的程序退回到之前的状态 Python是一种高级编程语言&#xff0c;因其易读易懂而闻名于世。Python中有很多命令用于编写程序&#xff0c;其中一项重要的命令是后退命令。本文将介绍Python后退命令的使用方法&#xff0c;并为您提供详细的步骤…...

OJ练习第127题——统计范围内的元音字符串数

统计范围内的元音字符串数 力扣链接&#xff1a;2559. 统计范围内的元音字符串数 题目描述 给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内&#xff08;包含 这…...

图片优化: CssSprites与Base64编码

文章目录 1 css sprites1.1 CSS Sprites是什么1.2 为什么需要css sprites1.3 优势1.4 使用原理1.5 DEMO 2 图片Base64编码 1 css sprites 1.1 CSS Sprites是什么 CSS Sprites是一种网页图片应用处理方式。 又被解释为&#xff1a; CSS精灵CSS图像拼合CSS贴图定位CSS图片精灵…...

JavaScript中的Map、WeakMap和Object的区别

Map Map是一种新的数据结构&#xff0c;它允许使用任何数据类型&#xff08;包括对象和基本数据类型&#xff09;作为键。 Map的一些特性包括&#xff1a; 保持键的插入顺序&#xff1a;当遍历Map时&#xff0c;键值对会按照插入顺序返回。键可以是任意类型&#xff1a;与Obj…...

华为OD机试之打印机队列(Java源码)

打印机队列 题目描述 有5台打印机打印文件&#xff0c;每台打印机有自己的待打印队列。 因为打印的文件内容有轻重缓急之分&#xff0c;所以队列中的文件有1~10不同的代先级&#xff0c;其中 数字越大优先级越高 打印机会从自己的待打印队列中选择优先级最高的文件来打印。 如…...

分享一个国内免费的ChatGPT网站,手机电脑通用,免费无限制,支持AI绘画

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具&#xff0c;近期的热度直接沸腾&#x1f30b;。 作为一个AI爱好者&#xff0c;翻遍了各大基于ChatGPT的网站&#xff0c;终于找到一个免费&#xff01;免登陆&#xff01;手机电脑通用&#xff01;国内可直接对话的C…...

【面向对象编程1】——类和对象——如桃花来

目录索引 面向过程和面向对象的区别&#xff1a;面向过程&#xff1a;面向对象&#xff1a;总结&#xff1a; 类和对象&#xff1a;定义类&#xff1a;语法&#xff1a; 创建对象&#xff1a;实例演示&#xff1a; 魔法方法&#xff1a;__init __方法&#xff1a;__ del __方法…...

chat聊天系统消息消费时遇到的问题及优化思路(二)

1、前言 考虑下面几个条件下如何提升kafka的消费速度 消息要求严格有序&#xff0c;如chat聊天消息业务处理速度慢&#xff0c;如处理一条数据需要100ms分片不合理&#xff0c;如有的分区很闲&#xff0c;有的分区消息数量积压 2、解决方案 1、顺序问题 关于消息消费时存在…...

js正则中的match()

在前端开发中&#xff0c;正则表达式是一大利器。所以我们这次就来讨论下match()方法。 match本身是JavaScript语言中字符串对象的一个方法&#xff0c;该方法的签名是 match([string] | [RegExp]) 它的参数既可以是一个字符串&#xff0c;也可以是一个正则表达式。该方法绝…...

Apache 配置和应用

目录 构建虚拟 Web 主机 Options指令解释 Options指令常用选项 AllowOverride指令解释&#xff1a; 地址限制策略&#xff1a; httpd服务支持的虚拟主机类型包括以下三种: 基于域名的虚拟主机 1&#xff0e;为虚拟主机提供域名解析 2.为虚拟主机准备网页文档 3.添加虚拟…...

实现PyTorch/ONNX自定义节点操作的TensorRT部署

参考一 下面是基本步骤&#xff1a; 加载训练好的bev transformer网络权重参数&#xff1a; import torch from model import Modelmodel Model() model.load_state_dict(torch.load("path/to/weights"))定义新的自定义操作&#xff1a; import torch from torc…...

Shamir 秘密共享、GMW和BGW方案

一、Shamir秘密共享 Shamir秘密共享方案是一种将秘密拆分成多份并分配给多个参与者保存&#xff0c;只有在满足特定条件下才能恢复原始秘密的密码学方案。它具有良好的容错性、加法同态性和无条件安全性等特点。 具体地&#xff0c;Shamir秘密共享方案可以概括为以下步骤&…...

Day56【动态规划】583.两个字符串的删除操作、72.编辑距离

583.两个字符串的删除操作 力扣题目链接/文章讲解 视频讲解 1、确定 dp 数组下标及值含义 dp[i][j]&#xff1a;以下标 i 为结尾的字符串 word1&#xff0c;和以下标 j 为结尾的字符串 word2&#xff0c;想要达到相等&#xff0c;所需要删除元素的最少次数为 dp[i][j] 2、…...

Arnold图像置乱的MATLAB实现

这件事情的起因是这样的&#xff0c;我需要研究一下各种图像置乱的算法。然后在知乎上找到了一篇关于Arnold变化的文章&#xff0c;但是呢&#xff0c;这个人实际上是卖资料&#xff0c;代做大作业的。详细的代码根部不给你&#xff0c;则给我气坏了&#xff0c;必须要手动实现…...

ASP.NET Core

1. 入口文件 一个应用程序总有一个入口文件&#xff0c;是应用启动代码开始执行的地方&#xff0c;这里往往也会涉及到应用的各种配置。当我们接触到一个新框架的时候&#xff0c;可以从入口文件入手&#xff0c;了解入口文件&#xff0c;能够帮助我们更好地理解应用的相关配置…...

javascript基础二十二:举例说明你对尾递归的理解,有哪些应用场景

一、递归 递归&#xff08;英语&#xff1a;Recursion&#xff09; 在数学与计算机科学中&#xff0c;是指在函数的定义中使用函数自身的方法 在函数内部&#xff0c;可以调用其他函数。如果一个函数在内部调用自身本身&#xff0c;这个函数就是递归函数 其核心思想是把一个大型…...

hive中如何计算字符串中表达式

比如 select 1(2-3)(-4.1-3.1)-(4-3)-(-3.34.3)-1 col ,1(2-3)(-4.1-3.1)-(4-3)-(-3.34.3)-1 result \ 现在的需求式 给你一个字符串如上述col 你要算出result。 前提式 只有和-的运算&#xff0c;而且只有嵌套一次 -(4-3)没有 -(-4(3-(31)))嵌套多次。 第一步我们需要将运…...

百度网盘限速破解终极指南:macOS用户免费解锁SVIP高速下载

百度网盘限速破解终极指南&#xff1a;macOS用户免费解锁SVIP高速下载 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘在macOS上的蜗牛下…...

AI专著撰写神器来袭!一键生成20万字专著,附带专业框架和低查重保障!

写学术专著的挑战与AI工具助力 写学术专著是一项挑战&#xff0c;不仅考验学术能力&#xff0c;也对心理承受力提出了要求。与团队合作的论文写作不同&#xff0c;专著通常是独立完成的过程。从选题、框架搭建到具体内容的撰写与修改&#xff0c;每个环节都需要作者亲自去完成…...

ML模型服务化落地实战:从Notebook到高稳定生产环境

1. 项目概述&#xff1a;这不是一次“部署上线”演示&#xff0c;而是一场真实世界的ML交付实战复盘“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题里藏着三个关键信号&#xff1a;Notebook是起点&#xff0c;不是终点&#xff1b;Produ…...

如何用Translumo实现实时屏幕翻译:打破语言障碍的终极指南

如何用Translumo实现实时屏幕翻译&#xff1a;打破语言障碍的终极指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 还在…...

如何在Windows上实现高效屏幕标注:gInk免费工具完全指南

如何在Windows上实现高效屏幕标注&#xff1a;gInk免费工具完全指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 你是否需要在演示时快速圈出重点&#xff0c;或在线…...

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan搭建保姆教程

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan搭建保姆教程。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

git fsck 深度解析 Git 仓库的体检医生

git fsck&#xff08;File System ChecK&#xff09;是 Git 内置的仓库完整性验证工具。它通过遍历对象数据库&#xff0c;验证每一个对象的哈希值与内容是否一致&#xff0c;找出悬空对象、损坏数据和引用断裂等问题。理解 git fsck&#xff0c;本质上就是理解 Git 的对象存储…...

AltStore技术深度解析:非越狱iOS侧载方案实战指南

AltStore技术深度解析&#xff1a;非越狱iOS侧载方案实战指南 【免费下载链接】AltStore AltStore is an alternative app store for non-jailbroken iOS devices. 项目地址: https://gitcode.com/gh_mirrors/al/AltStore 在iOS生态系统中&#xff0c;应用分发一直受到A…...

【AI】多阶段执行:分阶段完成大型任务

多阶段执行&#xff1a;分阶段完成大型任务&#x1f4dd; 本章学习目标&#xff1a;本章介绍流程编排&#xff0c;让AI Agent执行更加规范可控。通过本章学习&#xff0c;你将全面掌握"多阶段执行&#xff1a;分阶段完成大型任务"这一核心主题。一、引言&#xff1a;…...

绝地求生罗技鼠标宏压枪脚本终极配置指南:从零到精通的完整解决方案

绝地求生罗技鼠标宏压枪脚本终极配置指南&#xff1a;从零到精通的完整解决方案 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在《绝地求生》这…...