Rust学习笔记006:代码组织

在这里插入图片描述

Crate

  • 在Rust中,“crate” 是指 Rust 的代码单元,它可以包含一个或多个模块(modules)。Rust 的 crate 分类主要有两个方面:库(Library Crates)和二进制(Binary Crates)。此外,Rust 社区中还有一些其他类型的 crate,例如工具 crate(提供额外的构建工具)、测试 crate(专门用于测试)等。这些 crate 通常被设计用于满足特定需求或解决特定问题。
    在这里插入图片描述
  1. 库(Library Crates):

    库 crate 是为了提供可重用的代码而设计的。它可以被其他程序引用,并在其它 crate 中使用。库 crate 可以包含一系列模块,结构体,函数等,以便其他人或你自己可以通过引用它来使用这些功能。

    创建一个库 crate,你可以使用 cargo 命令行工具:

    cargo new my_library --lib
    

    这将创建一个名为 my_library 的库 crate 项目。

  2. 二进制(Binary Crates):

    二进制 crate 是可执行的程序,它包含了 main 函数,可以直接运行。这种 crate 主要用于构建独立的应用程序,而不是作为库供其他 crate 使用。

    创建一个二进制 crate,你可以使用 cargo 命令行工具:

    cargo new my_binary --bin
    

    这将创建一个名为 my_binary 的二进制 crate 项目。

在这里插入图片描述

module

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

path路径

在这里插入图片描述

//假设结构如下
my_project/
|-- src/
|   |-- main.rs
|   |-- module1.rs
|   |-- module2.rs
|-- Cargo.toml// main.rs的代码如下// module1的绝对路径
mod module1;
use crate::module1::hello_from_module1;// module2的相对路径
mod module2;
use self::module2::hello_from_module2;fn main() {hello_from_module1();hello_from_module2();
}

在这里插入图片描述

  • pub修饰struct时
    在这里插入图片描述

pub关键字

在这里插入图片描述

在这里插入图片描述

super关键字

  • 在 Rust 中,super 关键字用于引用父级模块或父级作用域中的实体。它通常用于在子模块中访问父模块的定义、调用父级作用域中的函数或访问父级的路径等情况下。类似linux命令..

例如,假设有以下代码结构:

// 父模块
mod parent_mod {pub fn parent_function() {println!("这是父模块的函数!");}
}// 子模块
mod child_mod {use super::parent_function; // 使用 super 引用父模块中的函数pub fn child_function() {println!("这是子模块的函数!");parent_function(); // 调用父模块的函数}
}fn main() {child_mod::child_function(); // 调用子模块的函数
}

use关键字

  • 当你想要在 Rust 中使用一个模块(或者模块中的项)时,可以使用 use 关键字来引入它们。
  1. 引入整个模块:

    use crate::module::submodule;
    

    这个语法将整个 module::submodule 模块引入到当前作用域中,使得你可以直接使用其中的项而不需要使用限定路径的方式。

  2. 引入特定项:

    use crate::module::submodule::item;
    

    这个语法将 module::submodule::item 项引入到当前作用域中,使得你可以直接使用它而不需要使用限定路径的方式。

  3. 使用别名:

    use crate::module::submodule::item as alias;
    

    这个语法将 module::submodule::item 项引入到当前作用域中,并给它起一个别名 alias,这样你可以使用 alias 来代替原始的项名。

  4. 通配符引入:

    use crate::module::submodule::*;
    

    这个语法将 module::submodule 模块中所有的项都引入到当前作用域中,使得你可以直接使用这些项而不需要使用限定路径的方式。但需要注意的是,通配符引入可能会导致命名冲突,因此需要谨慎使用。

pub use

在这里插入图片描述

  • What is the difference between use and pub use?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模块写到文件中

在这里插入图片描述

  • 修改之前
    在这里插入图片描述

  • 之后
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css中的BFC

定义 BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。 涉及概念 box Box 是 CSS 布局的对象…

前端工程化及其实践1

前端工程化及其实践1 前端工程化及其实践又名:写毕设到企业级前端(第一天) 前端工程化简介 目录 前端工程化及其实践 前端工程化简介传统和现代化开发的案例对比 传统前端案例现代化前端 现代前端案例现代化项目结构举例 vue简单化的项目结…

【Java面试题】HTTP与 HTTPS 的区别

HTTP 与 HTTPS 的区别 : 主要体现在三个方面,分别是 信息传输安全、证书和身份验证 、连接方式 信息传输安全: HTTP 是超文本传输协议,HTTP下的信息是明文传输的,因此使用HTTP协议可能导致信息被截获或者第三方恶意…

病理HE学习贴(自备)

目录 正常结构 癌症HE 在线学习 以胃癌的学习为例 正常结构 1:胃粘膜正常结构和细胞分化 ●表面覆盖小凹上皮细胞(主要标志物:MUC5AC)以保护黏膜。 ●胃底腺固有腺体由黏液颈细胞(MUC6)、主细胞(Pepsinogen l)和壁细胞(Proton pump α-subunit)组…

中科亿海微Flash擦写读

引言 在数字存储技术的领域中,闪存(Flash)是一种非易失性存储器,以其高速读写、低功耗和较高的可靠性而备受关注。相比于传统的磁盘存储技术,闪存具有更小的体积、更高的数据密度和更长的寿命,因此在各种应…

算法练习Day23 (Leetcode/Python-回溯算法)

46. Permutations Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order. Example 1: Input: nums [1,2,3] Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路:此题可用回溯…

SELinux策略语法以及示例策略

首发公号:Rand_cs 本文来讲述 SELinux 策略常用的语法,然后解读一下 SELinux 这个项目中给出的示例策略 安全上下文 首先来看一下安全上下文的格式: user : role : type : level每一个主体和客体都有一个安全上下文,通常也称安…

oracle学习(6)

其他数据库对象 视图: 常见数据库对象——视图:从表中抽出的逻辑上相关的数据集合。 所以:1. 视图基于表。2. 视图是逻辑概念。3. 视图本身没有数据。 创建视图 创建语法与创建表类似,只需要将table → view即可: SQL> …

Selenium教程04:鼠标+键盘网页的模拟操作

在webdriver 中,鼠标操作都封装在ActionChains类中,使用的时候需要导入这个包。 from selenium.webdriver import ActionChainsActionChains方法列表如下: click(on_elementNone) ——单击鼠标左键click_and_hold(on_elementNone) ——点击…

将PPT4页并排成1页

将PPT4页并排成1页打印 解决方法: 方法一 在打印时选择: 打开 PPT,点击文件选项点击打印点击整页幻灯片点击4张水平放置的幻灯平页面就会显示4张PPT显示在一张纸上 方法二 另存为PDF: 打开电脑上的目标PPT文件,点击文件点击…

Android 提取(备份)apk(安装包)

Android 提取(备份)apk(安装包) 一、通过安卓代码的方式 主要分三步: 根据应用找到包名根据包名获得apk提取apk 提取apk代码 private static final String BACKUP_PATH "/sdcard/backup1/"; private static final String APK ".apk";pri…

11.2 Screen调试实战(二,运行时阶段)

三,运行时阶段 运行时出现的问题是比较难查的。 其中一些问题可能是: 应用程序发送了错误的请求应用程序未发送请求驱动问题OpenGL函数调用异常我们可以使用一些调试工具或通过slog2info打印的日志排查问题。 3.1 请求 我们可以通过持久化保存/dev/screen/requests 文件的…

可拖拽流程图组件开发

效果 说在前面 流程图在技术领域是一种常见的可视化工具,用于展示系统、应用或业务流程的各个步骤以及它们之间的关系。它们可以帮助开发人员和项目团队更好地理解和规划复杂的流程,从而提高工作效率和准确性。但是,传统的静态流程图有时无法…

《深入理解C++11:C++11新特性解析与应用》笔记七

第七章 为改变思考方式而改变 7.1 指针空值--nullptr 7.1.1 指针空值:从0到NULL,再到nullptr 传统C头文件里NULL是一个宏定义: 在函数重载同时出现int和char *参数版本的函数时,使用NULL作为参数调用函数会调用int参数版本&…

12-数据结构-排序

排序算法 一.比较类排序 1.交换排序 (1).冒泡 #include <stdio.h>void PrintContext(char sort[], int size) {for(int i0;i<size;i){printf("%d ", sort[i]);}printf("\n"); }//冒泡排序 //Reverse 0:正向排序 //Reverse 1:反向排序 void Order…

【数据库原理】(2)数据库管理系统(DBMS)介绍

数据库管理系统&#xff08;Database Management System, DBMS&#xff09;是一种特殊的软件&#xff0c;它充当用户和电脑操作系统之间的中间层。它的主要任务是帮助用户轻松地创建、使用和维护数据库&#xff0c;同时确保数据的安全、完整性&#xff0c;以及支持多用户同时访…

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据&#xff0c;在主中心搭建了个集群&#xff0c;随着es在我们系统中的地位越来越重要&#xff0c;数据也越来越多&#xff0c;针对它的安全性问题也越发重要&#xff0c;那如何对es做异地容灾呢&#xff1f; 今天咱们就一起看下官方提供的…

【电商项目实战】商品详情显示与Redis存储购物车信息

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《电商项目实战》。&#x1f3af;&#x1f3af; &am…

合伙企业有哪些分类

合伙企业分为&#xff1a;普通合伙企业和有限合伙企业。其中&#xff0c;普通合伙企业又包含特殊的普通合伙企业。 1、普通合伙企业由2人以上普通合伙人(没有上限规定)组成。 普通合伙企业中&#xff0c;合伙人对合伙企业债务承担无限连带责任。 特殊的普通合伙企业中&#xf…

软件测试/测试开发丨Python 封装 学习笔记

封装的概念 封装&#xff08;Encapsulation&#xff09; 隐藏&#xff1a;属性和实现细节&#xff0c;不允许外部直接访问暴露&#xff1a;公开方法&#xff0c;实现对内部信息的操作和访问 封装的作用 限制安全的访问和操作&#xff0c;提高数据安全性可进行数据检查&#x…