【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
7.3.1. super
我们可以通过在路径开头使用super
来访问父级模块路径中的内容,就像使用..
语法启动文件系统路径。例如:
fn deliver_order() {}mod back_of_house {fn fix_incorrect_order() {cook_order();super::deliver_order();}fn cook_order() {}
}
当然也可以用绝对路径实现同样的效果:
fn deliver_order() {}mod back_of_house {fn fix_incorrect_order() {cook_order();crate::deliver_order();}fn cook_order() {}
}
7.3.2. pub struct
把pub
关键字加在stuct
前就可以把结构体声明为公共的,如下例:
mod back_of_house {pub struct Breakfast {toast: String,seasonal_fruit: String,}
}
需要注意的是,这个结构体虽然是公共的,但结构体中的字段默认是私有的,除非加上pub
关键字。
在Rust里,绝大多数情况下如果某个东西没加pub
,那就是私有的。(下文会讲到特例)
将字段设为公有也很简单。下面展示一下把Breakfast
的toast
改为公有后的代码:
mod back_of_house {pub struct Breakfast {pub toast: String,seasonal_fruit: String,}
}
我们再来看一个复杂点的代码例:
mod back_of_house {pub struct Breakfast {pub toast: String,seasonal_fruit: String,}impl Breakfast {pub fn summer(toast: &str) -> Breakfast {Breakfast {toast: String::from(toast),seasonal_fruit: String::from("peaches"),}}}
}pub fn eat_at_restaurant(){let mut meal = back_of_house::Breakfast::summer("Rye");meal.toast = String::from("Wheat");
}
- 在刚才的结构体之上,又构造了一个关联函数
summer
,参数是字符串切片类型的toast
,返回值是Breakfast
类型,Breakfast.toast
的值会是传进来的这个参数的值,Breakfast.seasonal_fruit
的值则会被设为peaches。summer
这个函数本质上是一个构造器,构造了Breakfast
的实例 - 在
eat_at_restaurant
这个函数中先使用相对路径调用了summer
这个构造器构造了一个实例,把它赋给了可变变量meal
。而meal
中的toast
字段被设为了Rye,seasonal_fruit
的值则是peaches(构造器中写的)。
下面一行中,因为Breakfast
这个结构体是公共的所以meal.toast
可以直接被更改,这里是改为了Wheat。
在eat_at_restaurant
这个函数中写下meal.seasonal_fruit = String::from("buleberries");
这一行会不会报错呢?答案是会的,因为结构体中的字段默认是私有的,seasonal_fruit
并没有被声明为公有,所以外部代码无法修改它,而这里这句话尝试进行修改,所以就会报错。
7.3.3. pub enum
根struct
一样,只要把pub
关键字加上枚举类型也能变为公有的。如下例:
mod back_of_house {pub enum Appetizer {Soup,Salad,}
}pub fn eat_at_restaurant() {let order1 = back_of_house::Appetizer::Soup;let order2 = back_of_house::Appetizer::Salad;
}
但于struct
不同,struct
下的字段默认是私有的,而公共的枚举类型下的变体默认就是公共的,不需要把pub
关键字加在变体之前。这一点和Rust默认私有的规则不一样,因为只有公共的枚举类型下是公共的变体它才有用,而struct
下部分字段是私有的并不会影响它的使用。
但需要注意的是,枚举类型下的变体是公共的的前提条件是这个枚举类型被声明为公共的。
相关文章:
【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.3.1. super 我们可以通过在路径开头使用super来访问父级模块路径中的内容,就像使用..语法启动文件系统路径。例如ÿ…...
wangEditor富文本插件在vue项目中使用和媒体上传的实现
wangEditor是前端一个比较流行的简洁易用,功能强大的前端富文本编辑器,支持 JS Vue React,提供了很多丰富的功能,下面手把手教你实现wangWditor富文本插件在vue项目中配置,保存、图片上传等功能。无脑ctrlc即可 基本功…...
FFmpeg 的常用API
FFmpeg 的常用API 附录:FFmpeg库介绍 库介绍libavcodec音视频编解码核心库编码 (avcodec_send_frame, avcodec_receive_packet)。解码 (avcodec_send_packet, avcodec_receive_frame)。libavformat提供了音视频流的解析和封装功能,多种多媒体封装格式&…...
【软件】教务系统成绩提交工具使用步骤
【软件】教务系统成绩提交工具使用步骤 零、快速开始 安装 与大多数软件一样,安装步骤很简单,一直点击“下一步”即可快速完成安装,安装完成后,在桌面会有一个软件图标,双击即可打开软件主界面。 导入成绩到Excel中…...
es快速扫描
介绍 Elasticsearch简称es,一款开源的分布式全文检索引擎 可组建一套上百台的服务器集群,处理PB级别数据 可满足近实时的存储和检索 倒排索引 跟正排索引相对,正排索引是根据id进行索引,所以查询效率非常高,但是模糊…...
埃斯顿机器人程序模版案例,欢迎指点
埃斯顿机器人程序模版案例,欢迎指点...
解锁成长密码:探寻刻意练习之道
刻意练习,真有那么神? 在生活中,你是否有过这样的困惑:每天苦练英语口语,可一到交流时还是支支吾吾;埋头苦学吉他,却总是卡在几个和弦转换上;工作多年,业务能力却似乎陷入…...
对外发PDF设置打开次数
在线 Host PDF 文件并对链接进行限制——保障文件安全的最佳解决方案 在数字化办公和远程协作日益普及的今天,如何安全高效地分享 PDF 文件成为许多用户关注的重点。MaiPDF 作为一款功能强大的在线工具,不仅支持在线 host PDF 文件,还提供多…...
【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别
su 命令 su (Switch User 切换用户),允许用户切换到另一个用户的身份,默认情况下是切换到 root 用户。 默认行为:如果只运行 su,则系统会要求输入 root 用户的密码来切换到 root 用户,获取管理员权限。 切换到其他用…...
leetcode hot 100搜索回溯
39. 组合总和 已解答 中等 相关标签 相关企业 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candi…...
记录-->为2025添砖java的第二天
如何在java中创建自己的方法呢,我认为它和在C语言c里面写函数就没啥区别,(⊙﹏⊙),可能有一点点就是说public static int add(int a,int b){}就是得和main方法里面的状态一致。 import java.util.Scanner; public class Math3 {public stati…...
uniapp小程序实现弹幕不重叠
uniapp小程序实现弹幕不重叠 1、在父组件中引入弹幕组件 <template><!-- 弹幕 --><barrage ref"barrage" class"barrage-content" reloadDanmu"reloadDanmu"></barrage> </template> <script>import barr…...
拼多多纠偏,能否实现买卖平权?
科技新知 原创作者丨江蓠 编辑丨蕨影 当曾将仅退款、运费险作为标配的电商平台们开始听到商家诉求,有意优化营商环境,作为“仅退款”服务发起者的拼多多也坐不住了。 在推出一揽子减免计划讨好中小商家之后,拼多多近期被传正在内测精选用户…...
【Leetcode】3159. 查询数组中元素的出现位置
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个整数数组 nums ,一个整数数组 queries 和一个整数 x 。 对于每个查询 q u e r i e s [ i ] queries[i] queries[i] ,你需要找到 n u m s nums nu…...
PHP语言laravel框架中基于Redis的异步队列使用实践与原理
在 Laravel 中,基于 Redis 的异步队列是通过 Laravel 的队列系统与 Redis 服务结合来实现的。这种队列机制允许你将任务推送到队列中,并由后台工作进程异步处理这些任务。这样,你就可以将耗时的操作(如发送邮件、处理视频、数据同…...
Element-plus自动导入
安装 npm i element-plus 自动引入 1. 安装两个插件 npm install -D unplugin-vue-components unplugin-auto-import2. 配置插件 vue3项目修改vite.config.js,把两个插件添加入即可,注意:不是覆盖原有配置 Vite // vite.config.js import { define…...
贪心算法(常见贪心模型)
常见贪心模型 简单排序模型 最小化战斗力差距 题目分析: #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n; int a[N];int main() {// 请在此输入您的代码cin >> n;for (int i 1;i < n;i) cin >> a[i];sort(a1,a1n);…...
碰一碰发视频后端源码技术开发详解,支持OEM
一、引言 碰一碰发视频作为一种新颖的交互方式,在前端为用户带来便捷体验的同时,后端技术起着至关重要的支撑作用。后端负责管理视频资源、处理 NFC 标签信息与视频的关联逻辑、用户数据的存储与分析以及与前端的高效通信,确保整个系统稳定、…...
Python vs PHP:哪种语言更适合网页抓取
本文将比较 Python 和 PHP,以帮助读者确定哪种语言更适合他们的需求。文章将探讨两种语言的优点和缺点,并根据读者的经验水平分析哪种语言可能更容易上手。接下来,文章将深入探讨哪种语言在抓取网页数据方面更胜一筹。 简而言之,…...
SpringBoot 新特性
优质博文:IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持,spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux,它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…...
NAT 技术如何解决 IP 地址短缺问题?
NAT 技术如何解决 IP 地址短缺问题? 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 随着互联网的普及和发展,IP 地址的需求量迅速增加。尤其是 IPv4 地址&…...
微积分复习(微分方程)
1,一阶微分方程 可分离的微分方程: 可以把x和y分列等号两边,然后求积分可以解决 齐次方程和准齐次方程 要求是 :yf(y/x),也就是没有单独的x项,我们可以通过设ty/x来统一变量方便我们运算 准齐次方程就是常数项不统一,我们可以将Xxa,Yyb来消灭常数项进而转化为齐次形式…...
动态规划子序列问题系列一>等差序列划分II
题目: 解析: 1.状态表示: 2.状态转移方程: 这里注意有个优化 3.初始化: 4.填表顺序: 5.返回值: 返回dp表总和 代码: public int numberOfArithmeticSlices(int[] nums) {in…...
【连续学习之SSL算法】2018年论文Selfless sequential learning
1 介绍 年份:2018 期刊: arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一种名为SLNID(Sparse coding through Local Neural Inhibition and…...
【FastAPI】中间件
【FastAPI】中间件 一、概述二、作用2.1 日志记录与监控2.2 身份验证与授权2.3 CORS(跨域资源共享)2.4 Gzip压缩2.5 会话管理2.6 自定义功能2.7 执行顺序 三、 总结四、相关链接 一、概述 FastAPI的中间件提供了一种强大的机制,允许开发者在…...
文档大师:打造一站式 Word 报告解决方案1
前言 在政府、医院、银行、财务以及销售等领域,常常需要创建各种报告文件来展开工作汇报,譬如季度销售报告、年度总结报告、体检报告和保险合同等。在没有报表工具支持之前,这类报告主要通过 Word 制作,费时费力且难以维护&#…...
再谈c++线性关系求值
目的 线性关系是最简单的一种关系,在编程当中应用非常多,所以,再说一次线性关系。 线性关系的定义是这样的: 两个变量之间存在一次方函数关系,就称它们之间存在线性关系。正比例关系是线性关系中的特例,反…...
【ES6复习笔记】Class类(15)
介绍 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,…...
AppAgent 源码 (xml 解析)
1. 数据准备 adb shell uiautomator dump /sdcard/output.xml # 获取手机ui界面的xml文件 adb pull /sdcard/output.xml output.xml # 将手机上的xml文件拉取到电脑上具体的xml文件: <?xml version1.0 encodingUTF-8 standaloneyes ?> <hierarchy ro…...
Oracle 11G还有新BUG?ORACLE 表空间迷案!
前段时间遇到一个奇葩的问题,在开了SR和oracle support追踪两周以后才算是有了不算完美的结果,在这里整理出来给大家分享。 1.问题描述 12/13我司某基地MES全厂停线,系统卡死不可用,通知到我排查,查看alert log看到是…...
FreeSwitch中启用WebRTC
在FreeSwitch中启用WebRTC需要进行一系列配置。以下是详细的步骤: 1. 安装必要的依赖: 确保安装了支持WebRTC的依赖库,如libsrtp。 2. 配置SIP Profile: 编辑 conf/sip_profiles/internal.xml 文件,添加或修改以下内…...
力扣矩阵-算法模版总结
lc-73.矩阵置零-(时隔14天)-12.27 思路:(23min22s) 1.直接遍历遇0将行列设0肯定不行,会影响后续判断,题目又要求原地算法,那么进一步考虑是否可以将元素为0,其行列需要设为0的位置给存储下来,最后再遍历根据…...
服务端高并发分布式结构演进之路
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 服务端高并发分布式结构演进之路 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 概述 …...
虚拟机桥接模式
主机Win10,虚拟机xp 1.虚拟机设置中选择桥接模式 2.在虚拟机菜单:编辑>虚拟机网络编辑,点击“更改设置”,可以看到三个网卡,这三个网卡分别对应不同的网络共享模式。桥接模式须使用VMnet0,如果没看到这个网卡&…...
JVM调优实践篇
理论篇 1多功能养鱼塘-JVM内存 大鱼塘O(可分配内存): JVM可以调度使用的总的内存数,这个数量受操作系统进程寻址范围、系统虚拟内存总数、系统物理内存总数、其他系统运行所占用的内存资源等因素的制约。 小池塘A&a…...
SpeedTree学习笔记总结
SpeedTree是一款业界领先的三维树木植被建模软件,特别适用于游戏开发和影视制作。 一、基础操作 旋转:鼠标左键 平移:鼠标中键 缩放:鼠标中键滚动 Trunks树干节点 Branches树枝 Cap给树干封口 Frond创建大树叶 Decorations…...
【MuJoCo和PhysX】
MuJoCo 与 Unity 的 PhysX 引擎的主要区别 应用领域: MuJoCo:主要用于机器人学、强化学习、生物力学等领域,擅长处理多自由度、复杂动力学问题,尤其适合进行高精度的物理仿真。 Unity PhysX:主要用于游戏开发、虚拟现…...
HTML制作一个普通的背景换肤案例2024版
一,完整的代码: <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>换肤</t…...
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...
qt QZipReader详解
1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录,并允许你解压缩单个或多个文件。通过 QZipReader,你可以以编程方式读取 .zip 文件中的内容,并提取它们到目标目录中。…...
开发场景中Java 集合的最佳选择
在 Java 开发中,集合类是处理数据的核心工具。合理选择集合,不仅可以提高代码效率,还能让代码更简洁。本篇文章将重点探讨 List、Set 和 Map 的适用场景及优缺点,帮助你在实际开发中找到最佳解决方案。 一、List:有序存…...
顶顶通呼叫中心中间件mod_cti模块安全增强,预防盗打风险(mod_cti基于FreeSWITCH)
文章目录 前言联系我们mod_cti版本支持安全加强说明 前言 FreeSWITCH暴露在公网最大的风险就是被不法之人盗打 出现盗打的主要原因以下几点: 分机密码太简单或者密码泄露了拨号方案配置不合理sofia配置错误 所以我们给顶顶通呼叫中心中间件添加了安全加强功能&am…...
bash shell的条件语句
~ script% touch if.sh ~ script% chmod 755 if.sh1.if-then-fi #!/usr/bin/env bashFOOD$1 if [ $FOOD"apple" ] thenecho The food is $FOOD fi exit 0~ script % ./if.sh apple The food is apple如果要将多条语句写在一行,可以…...
拦截器Interceptor与过滤器Filter
拦截器Interceptor 定义: SpringMVC内置拦截机制,允许在请求被目标方法处理的前后进行拦截,执行一些额外操作;比如:权限验证,日志记录,数据共享等。 实现步骤 1、自定义拦截器 Component public class …...
水电站视频智能监控系统方案设计与技术应用方案
一、背景需求 水电站作为国家重要的能源基地,其安全运行对于保障能源供应和社会稳定具有重要意义。然而,传统的人工监控方式存在着诸多问题,如人力成本高、监控范围有限、反应不及时等。因此,水电站急需引进一种先进的视频智能监控…...
教师管理系统
大概功能: 1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出 数据会保存到 txt 文件里面 姓名:必须是中文 手机号码:必须是11位,必须是数字 效果展示: 代码展示: Teache…...
nexus docker安装
#nexus docker 安装 docker pull sonatype/nexus3 mkdir -p /data/nexus-data docker run -itd -p 8081:8081 --privilegedtrue --name nexus3 \ -v /data/nexus-data:/var/nexus-data --restartalways docker.io/sonatype/nexus3 #访问 http://192.168.31.109:8081/ 用户名&am…...
canvas之进度条
canvas之进度条 效果: 封装的组件 <template><div class"circle" :style"{ width: props.radius px, height: props.radius px }"><div class"circle-bg" :style"{ width: props.radius - 5 px, height: pr…...
【ES6复习笔记】Promise对象详解(12)
1. 什么是 Promise? Promise 是 JavaScript 中处理异步操作的一种机制,它可以让异步操作更加容易管理和控制。Promise 对象代表一个异步操作的最终完成或失败,并提供了一种方式来处理操作的结果。 2. Promise 的基本语法 Promise 对象有三…...
前端Python应用指南(五)用FastAPI快速构建高性能API
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比(二)深入Flask:理解Flask的应用结构与模块化设计(三)Django vs Flask:哪种框架适…...