Rust代码中如何引用同级的其他module
背景
在一个rust源码工程中,需要在某一个crate中编写同一级别的module,crate结构大致如下:
root@dragonfly:/home/RustProject/vmm# tree .
.
├── Cargo.lock
├── Cargo.toml
└── src
├── lib.rs
├── vmm_config
│ ├── boot.rs
│ ├── driver.rs
│ ├── info.rs
│ ├── mod.rs
└── vm.rs
其中,vm.rs
与vm_config
是同一等级的module
,并且在lib.rs中使用pub mod xxx来重载两个module。现在需要在vm.rs中引入vmm_config中的各子module,引用方式如下:
root@dragonfly:/home/RustProjects/vmm/src# cat vm.rs
use vmm_config::driver::*;
use vmm_config::info::*;
use vmm_config::boot::*;
...
但会遇到如下错误:
error[E0433]: failed to resolve: use of undeclared type or module `vmm_config`
...
error[E0432]: unresolved imports `vmm_config::boot::BootConfig`, `vmm_config::boot::BootSourceConfig`,
...
经过千辛万苦终于找到了解决方案:
方案一:(使用super::vmm_config::xxx
)
root@dragonfly:/home/RustProjects/vmm/src# cat vm.rs
use super::vmm_config::driver::*;
use super::vmm_config::info::*;
use super::vmm_config::boot::*;
...
方案二:(使用use crate::vmm_config
)
root@dragonfly:/home/RustProjects/vmm/src# cat vm.rs
use crate::vmm_config;
use vmm_config::driver::*;
use vmm_config::info::*;
use vmm_config::boot::*;
...