【Rust自学】14.3. 使用pub use导出方便使用的API

news/2025/1/24 0:48:03/

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
请添加图片描述

14.3.1. 使用pub use导出方便使用的API

在第七章中我们介绍了mod关键字,我们使用它来将代码组织为模块,其中介绍的pub关键字可以讲模块或是方法设置为公共的以便外部代码调用。而外部代码要将模块或是方法引入当前作用域就得使用use关键字。

使用这些关键字就可将代码组织为面向开发者友好的形式。但是这种结构对代码库的最终用户不一定特别友好。比如说crate的结构程序在开发时对于开发者很友好,但是对于使用者不够方便。开发者会把程序结构分为很多层,使用者想要找到这种深层结构中的某个类型就很费劲。比如说: my_crate::some_module::another_module::UsefulType,而比较好用的写法是my_crate::UsefulType

对于这种问题,不需要开发者重新组织内部代码结构,使用pub use就可以重导出,创建一个于内部私有结构不同的对外公共结构。重导出这个操作会取得某个位置上的公共条目,并将其公开到另外一个位置,就好像它就定义在这个新的位置上。

看个例子:
lib.rs:

rust">//! # Art
//!
//! A library for modeling artistic concepts.pub mod kinds {/// The primary colors according to the RYB color model.pub enum PrimaryColor {Red,Yellow,Blue,}/// The secondary colors according to the RYB color model.pub enum SecondaryColor {Orange,Green,Purple,}
}pub mod utils {use crate::kinds::*;/// Combines two primary colors in equal amounts to create/// a secondary color.pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {//...}
}
  • kinds这个模块下有两个枚举类型,一个PrimaryColor一个SecondaryColor用于存储颜色变体。
  • utils模块下有函数叫mix,这个函数的功能就是把PrimaryColor的变体两个颜色混合成为SecondaryColor颜色,这里没有放出其中的代码。
  • 把枚举类型放在kinds下,把函数放在untils下对于开发者来说非常友好

main.rs:

rust">use art::kinds::PrimaryColor;
use art::utils::mix;fn main() {let red = PrimaryColor::Red;let yellow = PrimaryColor::Yellow;mix(red, yellow);
}

这里用到了lib.rs中的枚举类型和mix函数,为了引入作用域写了三层,而且枚举类型和函数在不同的模块中,对于使用者来说引入是非常麻烦。

此时生成的crate文档长这样:
请添加图片描述

如果我们使用重导入来重构代码呢:
lib.rs

rust">//! # Art
//!
//! A library for modeling artistic concepts.pub use self::kinds::PrimaryColor;
pub use self::kinds::SecondaryColor;
pub use self::utils::mix;pub mod kinds {/// The primary colors according to the RYB color model.pub enum PrimaryColor {Red,Yellow,Blue,}/// The secondary colors according to the RYB color model.pub enum SecondaryColor {Orange,Green,Purple,}
}pub mod utils {use crate::kinds::*;/// Combines two primary colors in equal amounts to create/// a secondary color.pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {//...}
}

main.rs:

rust">use art::mix; 
use art::PrimaryColor;fn main() {let red = PrimaryColor::Red;let yellow = PrimaryColor::Yellow;mix(red, yellow);
}

这个时候调用枚举类型和函数就不需要一层层地写模块了。

此时生成的crate文档:
请添加图片描述

文档中出现了Re-exports部分,所有重新导入的条目都写在了这里,对于crate的实际使用者来说查找这些类型和函数就非常的方便了。


http://www.ppmy.cn/news/1565633.html

相关文章

电脑有两张网卡,如何实现同时访问外网和内网?

要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的 IP 地址来达成。 检查一下网卡的连接 得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。 给网卡配上不一样的 IP 地…

vllm多卡部署Qwen2.5-72B-Instruct-GPTQ-Int4

双卡v100 32G部署结果如下,推理时长16s 3卡,tensor_parallel_size3,tensor并行的数量一定要能被attention heads整除 4卡,tensor_parallel_size4,推理速度4s

【博客之星】2024年度个人成长、强化学习算法领域总结

📢在2025年初,非常荣幸能通过审核进入到《2024年度CSDN博客之星总评选》TOP300的年度评选中,排名40。这还是第一次来到这个阶段,作为一名博士研究生,还是备受鼓舞的。在这里我将以回顾的方式讲述一下这一年在CSDN中走过…

分布式理解

分布式 如何理解分布式 狭义的分布是指,指多台PC在地理位置上分布在不同的地方。 分布式系统 分布式系**统:**多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任…

除了基本的事件绑定,鸿蒙的ArkUI

鸿蒙操作系统(HarmonyOS)是由华为技术有限公司开发的分布式操作系统,旨在为多种智能设备提供一个统一的操作平台。它不仅适用于智能手机,还适用于平板电脑、智能手表、智能电视等物联网设备。为了使开发者能够更加便捷地创建跨设备…

在 Ubuntu 上安装 MySQL 的详细指南

在Ubuntu环境中安装 mysql-server 以及 MySQL 开发包(包括头文件和动态库文件),并处理最新版本MySQL初始自动生成的用户名和密码,可以通过官方的APT包管理器轻松完成。以下是详细的步骤指南,包括从官方仓库和MySQL官方…

论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24

论文地址:https://arxiv.org/abs/2403.01744 bib引用: misc{zhang2024notellmretrievablelargelanguage,title{NoteLLM: A Retrievable Large Language Model for Note Recommendation}, author{Chao Zhang and Shiwei Wu and Haoxin Zhang and Tong Xu…

Python 常用运维模块之OS模块篇

Python 常用运维模块之OS模块篇 OS 模块获取当前工作目录更改当前工作目录返回当前目录路径返回上一级目录路径递归生成目录路径删除目录创建目录删除目录列出特定目录下文件和子目录删除某个特定文件重命名某个文件获取某个文件/目录的信息输出目录路径分隔符输出文件行终止符…