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::*;
...