我的主要职能是:
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);
}我是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
}
}
}如您所见,tools中有两个结构体:tools::TerminalFactory和tools::Terminal。我想要做的是让这两个结构在两个单独的文件中实现,因为tools模块将非常拥挤,我不想用数千行代码来干扰它。
我无法想出一种方法将这段代码移动到单独的文件中,并将其保存在tools中。当我将它移到其他文件时,我得到的是,在tools/mod.rs中,我必须定义mod
mod terminal;
mod terminal_factory;但是这会将结构移动到tools::terminal_factory::TerminalFactory和tools::terminal::Terminal,这不是我想要的。
这是如何在没有*.toml和货物的情况下以一种简朴的方式完成的?
我当然会使用货物,但我想事先了解如何在没有货物的情况下做到这一点。
发布于 2021-09-03 10:48:14
当您不想公开这种模块化结构时,通常会重新导出更深层次的类型。
在这里,您的工具/mod.rs文件将是
mod terminal;
mod terminal_factory;
pub use {
self::terminal::Terminal,
self::terminal_factory::TerminalFactory,
};pub use使外部代码能够像在上层模块中声明的那样使用TerminalFactory类型。
https://stackoverflow.com/questions/69043661
复制相似问题