我有这个主要功能:
mod tools;
fn main() {
let mut factory = tools::TerminalFactory::new();
let trm: tools::Terminal;
trm = factory.create("TTY1".to_string());
println!("{}", trm);
std::process::exit(0);
}
Run Code Online (Sandbox Code Playgroud)
这是tools/mod.rs:
pub struct Terminal {
id: u32,
pub name: String
}
impl Terminal {
pub fn get_id(self: &Self) -> u32 {
self.id
}
}
impl std::fmt::Display for Terminal {
fn fmt(self: &Self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "TERMINAL#{} ({})", self.id, self.name)
}
}
pub struct TerminalFactory {
next_id: u32
}
impl TerminalFactory {
pub fn new() -> TerminalFactory {
TerminalFactory {
next_id: 0
}
}
pub fn create(self: &mut Self, name: String) -> Terminal {
self.next_id += 1;
Terminal {
id: self.next_id,
name: name
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我必须在tools:tools::TerminalFactory和tools::Terminal. 我想要做的是在两个单独的文件中实现这两个结构,因为tools模块会非常拥挤,我不想用数千行代码来混乱它。
我无法想出一种方法来将此代码移动到单独的文件并将其保存在tools. 当我将它移动到其他文件时,我得到的是,tools/mod.rs我必须定义mod:
mod TerminalFactory;
mod Terminal;
Run Code Online (Sandbox Code Playgroud)
但这会将结构移动到tools::TerminalFactory::TerminalFactoryand tools::Terminal::Terminal,这不是我想要的。
这是如何在没有货物和没有货物的情况下以质朴的方式完成的*.toml?
我肯定会使用cargo,但我想事先了解没有它如何做到这一点。
当您不想公开这种模块化结构时,您通常会重新导出更深的类型。
在这里,您的 tools/mod.rs 文件将是
mod TerminalFactory;
mod Terminal;
pub use {
Terminal::Terminal,
TerminalFactory::TerminalFactory,
};
Run Code Online (Sandbox Code Playgroud)
这pub use使外部代码能够使用该TerminalFactory类型,就像它是在上层模块中声明的一样。
| 归档时间: |
|
| 查看次数: |
36 次 |
| 最近记录: |