如何将 crate 作为子模块导入?

How to import a crate as a sub module?

我想将一个 crate 导入到我的库中,然后将该 crate 当作我库中的一个模块来使用。如果我这样做:

extern crate sdl2;
pub use sdl2;

这给了我一个错误,建议我使用 sdl2::*,但我不想将所有名称从板条箱拖到我的库中,我希望将它们作为子模块处理,例如:

my_library::sdl2::init()

我也试过这个:

pub extern crate sdl2;

可以编译,但我不知道它做了什么。不过,它似乎并没有使箱子可以从我的图书馆公开访问。

您可以在 useextern crate 中使用重命名:

extern crate sdl2 as sdl2_;
pub use sdl2_ as sdl2;

我个人在 stdx 板条箱(看起来是 deprecated/abandoned,但至少目前是这样)中找到了如何做到这一点。

另一种解决方法:

extern crate sdl2;
mod sdl2 {
    pub use ::sdl2::*;
}

应该可以工作 -- 虽然未经测试。