Rust 重复的 use 语句

Pro*_*bak 3 rust

首先,我是 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”语句?

Jmb*_*Jmb 5

您可以创建一个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)