【Rust】8. 包、Crate 和 模块管理(公有、私有特性)

2023-10-12 00:10

本文主要是介绍【Rust】8. 包、Crate 和 模块管理(公有、私有特性),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

8.1 包和 Crate

8.1.1 基本概念

  • crate 是 Rust 在编译时最小的代码单位;crate 有两种形式:二进制项(可以被编译为可执行程序)和库(没有 main 函数,也不会编译为可执行程序,而是提供一些诸如函数之类的东西,使其他项目也能使用这些东西)
  • **包(package)**是提供一系列功能的一个或者多个 crate;中可以包含至多一个库 crate(library crate),也可以包含任意多个二进制 crate(binary crate),但是必须至少包含一个 crate(无论是库的还是二进制的)

在这里插入图片描述

8.2 模块的作用域与私有性

8.2.1 模块的相关概念

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

8.2.1 使用模块对相关代码进行分组

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

8.3 模块的路径

8.3.1 绝对路径与相对路径

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

8.3.2 使用 pub 关键字暴露路径

  • 模块公有并不使其内容也是公有的:模块上的 pub 关键字只允许其父模块引用它,而不允许访问内部代码;模块是一个容器,只是将模块变为公有能做的其实并不太多,同时需要更深入地选择将一个或多个项变为公有(即添加 pub 前缀)

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

8.3.3 使用 super 起始的相对路径

在这里插入图片描述

8.3.4 创建公有的结构体和枚举

  • 结构体:在一个结构体定义的前面使用了 pub ,这个结构体会变成公有的,但是这个结构体的字段仍然是私有的(其字段默认未私有的,可以根据情况决定每个字段是否公有
  • 枚举:其成员默认就是公有的

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

8.4 使用 use 关键字将路径引入作用域

8.4.1 use 的作用域

  • 注意:use 只能创建 use 当前所在的特定作用域内的短路径(比如:可用于在当前模块,切换到其他模块则需重新导入)

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

8.4.2 use 的使用习惯

  • 使用 use 时,一般是引入一个模块(而不是直接引入某些函数),在调用函数时需要指定父模块

在这里插入图片描述

8.4.3 as 关键字

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

8.4.4 pub use:重导出名称

  • use some_mod:仅在当前作用域生效,对外仍是私有的
  • pub use some_mod:不仅在当前作用域生效,还可导入到其他作用域生效

在这里插入图片描述

8.4.5 使用外部包

  • 对于外部包,需要先在 Cargo.toml 文件中添加所需的包,再使用 use 来导入包
  • 对于标准库,则直接 use 导入包即可

在这里插入图片描述

8.4.6 使用 {} 嵌套路径来简化 use 的使用

  • 举例:use std::{cmp::Ordering, io};use std::io::{self, Write};

在这里插入图片描述

8.4.7 通过 glob 运算符将所有的公有定义引入作用域

在这里插入图片描述

8.5 将模块拆分成多个文件

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

这篇关于【Rust】8. 包、Crate 和 模块管理(公有、私有特性)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/191831

相关文章

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构