【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中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主