当前位置:嗨网首页>书籍在线阅读

44-再次导出

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.9.2 再次导出

再次导出(re-export)允许我们有选择地从模块中暴露一些元素给外界。当我们使用Option和Result类型时,就已经在享受再次导出的便利性了。如果构造模块时需要创建很多嵌套目录来存放大量的子模块,那么再次导出有助于减少必须输入的导入路径。

例如,有一个名为bar.rs的模块来自我们创建的Cargo项目reexports:

// reexports_demo/src/foo/bar.rs
pub struct Bar;

Bar是src/foo/bar.rs下公开的结构体模块。如果用户想要在代码中使用Bar,那么必须编写如下代码:

// reexports_demo/src/main.rs
use foo::bar::Bar;
fn main() {
}

上述use语句非常烦琐。当你的项目中包含大量嵌套的子模块时,这会变得烦琐和笨拙。相反,我们可以将Bar从bar模块中重新导出到我们的软件包根目录,就像我们在foo.rs中那样:

// reexports_demo/src/foo.rs
mod bar;
pub use bar::Bar;

为了重新导出,我们采用了pub use关键字。现在我们可以很容易地使用Bar,就像使用foo::Bar一样。

默认情况下,Rust建议在根模块中进行绝对导入。绝对导入是以关键字crate开头的,而相对导入是使用关键字self实现的。当子模块重新导出到其父模块时,我们可能会从相对导入中受益,因为使用绝对导入会变得冗长而多余。