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?

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

模块写到文件中

在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE4运用C++和框架开发坦克大战教程笔记(十三)(第40~42集)

UE4运用C和框架开发坦克大战教程笔记(十三)(第40~42集) 40. 多按键绑定41. 自动生成对象42. 资源模块数据结构测试自动生成对象按资源类型生成对象 40. 多按键绑定 上节课实现了按键绑定系统的 4 种基础绑定,这节课来…

【大数据面试知识点】Spark的DAGScheduler

Spark数据本地化是在哪个阶段计算首选位置的? 先看一下DAGScheduler的注释,可以看到DAGScheduler除了Stage和Task的划分外,还做了缓存的跟踪和首选运行位置的计算。 DAGScheduler注释: The high-level scheduling layer that i…

畅捷通的 Serverless 探索实践之路

作者:计缘,阿里云云原生架构师 畅捷通介绍 畅捷通是中国领先的小微企业财税及业务云服务提供商,成立于 2010 年。畅捷通在 2021 年中国小微企业云财税市场份额排名第一,在产品前瞻性及行业全覆盖方面领跑市场,位居中…

C:Huffman编码a

【问题描述】 给定一组字符的Huffman编码表(从标准输入读取),以及一个用该编码表进行编码的Huffman编码文件(存在当前目录下的in.txt中),编写程序实现对Huffman编码文件的解码,并按照后序遍历序…

【UE 截图】 自定义截图路径 文件名

目录 0 引言1 实践 🙋‍♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏💥 标题:【UE 截图】 自定义截图路径 文件名❣️ 寄语:书到用时方恨少,事非经过不知难!🎈 最…

zlib.decompressFile报错 【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:方案1方案2此Bug解决方案总结寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了zlib.decompressFile报错 的问题。 问题: zlib.decompressFile报错,怎么解…

基于ssm的房屋租赁管理系统

功能介绍 房源信息模块: 房源信息展示、房源信息更新、房源信息增加、房源信息删除 账户管理模块: 账户登录、账户绑定、账户管理 租金结算模块: 每月租金信息、租金交付功能、月租金收入总额统计 房屋租赁合同管理模块: 房屋租赁…

【C语言】函数

函数是什么? “函数”是我们早些年在学习数学的过程中常见的概念,简单回顾一下:比如下图中,你给函数 f(x)2*x3 一个具体的x,这个函数通过一系列的计算来返回给你一个结果(图示如下)。 这就是数学中函数的基本过程和作用。但是你…

1.4 FMEA概述

FMEA适用场景 FMEA在三种基本情形下使用,每种情形都有不同的范围或重点。 情形1:新设计、新技术或新过程 FMEA的范围包括完整的设计、技术或过程。 情形2:现有设计或过程的新应用 FMEA的范围包含新环境、新场地、新应用或使用概况&#…

Servlet见解3

13 Cookie和Session http协议是一个无状态的协议,你每一个跳转到下一个页面的时候都是需要先登录才能使用,这样就很麻烦比如淘宝,没有cookie和session的话,用户在首页已经登录上去了,但是需要再次登录才能选择商品&am…

买对好车省钱又防坑,高性价比的买车攻略

一、教程描述 正所谓隔行如隔山,买车这件事情并不简单,买车的内幕还是有不少的,本套教程讲述买车攻略,非常适合准备买车的朋友,可以帮助大家买车少入坑,高性价比买到自己心仪的车。本套买车教程&#xff0…

Android 13 动态启用或禁用IPV6

介绍 客户想要通过APK来控制IPV6的启用和禁用,这里我们通过广播的方式来让客户控制IPV6。 效果展示 adb shell ifconfig 这里我们用debug软件,将下面节点置为1 如图ipv6已被禁用了 echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 修改 接下来…

十大排序总结之——冒泡排序、插入排序

同样,这两几乎也是被淘汰了的算法,尽管它们是稳定的,但是时间复杂度没人喜欢,了解一下就好,没啥好说的,注意最后一句话就行了 一,冒泡排序 1. 算法步骤 共n-1趟,谁两敢冒泡就换了…

IoT 物联网常用协议

物联网协议是指在物联网环境中用于设备间通信和数据传输的协议。根据不同的作用,物联网协议可分为传输协议、通信协议和行业协议。 传输协议:一般负责子网内设备间的组网及通信。例如 Wi-Fi、Ethernet、NFC、 Zigbee、Bluetooth、GPRS、3G/4G/5G等。这些…

算法基础之能被整除的数

能被整除的数 核心思想&#xff1a; 容斥原理 总面积 1-23-4…. 总集合元素中个数 1-23-4…. #include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N 20;typedef long long LL;int p[N];int main(){int n,m;cin&…

2024年【茶艺师(初级)】报名考试及茶艺师(初级)考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【茶艺师&#xff08;初级&#xff09;】报名考试及茶艺师&#xff08;初级&#xff09;考试技巧&#xff0c;包含茶艺师&#xff08;初级&#xff09;报名考试答案和解析及茶艺师&#xff08;初级&#xff09;…

03.QT命名规范及快捷键(部分)

一、命名规范 1.类名 大驼峰规则&#xff1a;首字母大写&#xff0c;单词和单词之间首字母大写。 2.变量名 小驼峰规则&#xff1a;首字母小写&#xff0c;单词和单词之间首字母大写。 二、快捷键 1.代码操作相关 注释&#xff1a;ctrl / 运行&#xff1a;ctrl r 编译…

基于Java SSM框架实现健康管理系统项目【项目源码】

基于java的SSM框架实现健康管理系统演示 JSP技术 JSP是一种跨平台的网页技术&#xff0c;最终实现网页的动态效果&#xff0c;与ASP技术类似&#xff0c;都是在HTML中混合一些程序的相关代码&#xff0c;运用语言引擎来执行代码&#xff0c;JSP能够实现与管理员的交互&#xf…

PyQt5-控件之QDialog(UI-业务分离搭建自定义xDialog)

1.继承QtWidgets.QWidget自定义对话框 继承于QtWidgets.QWidget自定义一个对话框类&#xff1a;SelectingDlg class SelectingDlg(QtWidgets.QWidget): def __init__(self): super(SelectingDlg, self).__init__() self.initUI() def initUI(self):s…

作业--day39

定义一个Person类&#xff0c;私有成员int age&#xff0c;string &name&#xff0c;定义一个Stu类&#xff0c;包含私有成员double *score&#xff0c;写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数&#xff0c;完成对Person的运算符重载(算术运算符、条件运算…