Rust中如何在代碼中引用sibling module

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

Reference

How do I import from a sibling module?.
通過例子學Rust

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章