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实现的。当子模块重新导出到其父模块时,我们可能会从相对导入中受益,因为使用绝对导入会变得冗长而多余。