首先,我是 Rust 的初学者,我开始使用代码分析器(Mega-Linter),它让我意识到我在子模块中重复了多少相同的“use”语句。这是我的源文件树的样子:
src/
- lib.rs
- ui/
- mod.rs
- ui_mod_1.rs
- ui_mod_2.rs
Run Code Online (Sandbox Code Playgroud)
然后我意识到我的 ui_mod_1.rs 和 ui_mod_2.rs 具有几乎相同的一堆“use”语句:
// ui_mod_1.rs
use tui::{
layout::{Alignment, Constraint, Direction, Layout, Rect},
style::{Color, Modifier, Style},
};
// rest of the file
Run Code Online (Sandbox Code Playgroud)
// ui_mod_2.rs
use tui::{
layout::{Alignment, Constraint, Direction, Layout, Rect},
style::{Color, Modifier, Style},
};
// rest of the file
Run Code Online (Sandbox Code Playgroud)
// mod.rs
pub mod ui_mod_1;
pub mod ui_mod_2;
Run Code Online (Sandbox Code Playgroud)
// lib.rs
pub mod ui;
Run Code Online (Sandbox Code Playgroud)
ui_mod_1.rs 和 ui_mod_2.rs 背后的想法是按主题拆分“ui 实用程序”函数,以避免拥有包含所有这些函数的巨大源文件。一个可能的解决方案是合并两个文件,但这不是我想要做的。
我尝试的是将两个子模块共有的“使用”移到 mod.rs 甚至 lib.rs 中,如下所示:
// mod.rs
pub use tui::{
layout::{Alignment, Constraint, Direction, Layout, Rect},
style::{Color, Modifier, Style},
};
pub mod ui_mod_1;
pub mod ui_mod_2;
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。经过一番研究后我仍然没有找到如何做到这一点。是否有一种优雅的方法来重新组合所有子模块的“use”语句?
您可以创建一个ui_prelude
包含 use 语句 as 的模块pub use
,然后use ui_prelude::*
在您的模块中执行以下操作:
// ui_prelude.rs
pub use tui::{
layout::{Alignment, Constraint, Direction, Layout, Rect},
style::{Color, Modifier, Style},
};
Run Code Online (Sandbox Code Playgroud)
// ui_mod_1.rs and ui_mod_2.rs
use super::ui_prelude::*;
Run Code Online (Sandbox Code Playgroud)
// mod.rs
mod ui_prelude.
pub mod ui_mod_1;
pub mod ui_mod_2;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
117 次 |
最近记录: |