【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

相关文章

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

Python AST 模块实战演示

《PythonAST模块实战演示》Python的ast模块提供了一种处理Python代码的强大工具,通过解析代码生成抽象语法树(AST),可以进行代码分析、修改和生成,接下来通过本文给大家介绍Py... 目录 什么是抽象语法树(AST)️ ast 模块的核心用法1. 解析代码生成 AST2. 查看 AST

Elasticsearch 的索引管理与映射配置实战指南

《Elasticsearch的索引管理与映射配置实战指南》在本文中,我们深入探讨了Elasticsearch中索引与映射的基本概念及其重要性,通过详细的操作示例,我们了解了如何创建、更新和删除索引,... 目录一、索引操作(一)创建索引(二)删除索引(三)关闭索引(四)打开索引(五)索引别名二、映射操作(一

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M