首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将结构的实现移动到单独的文件中,而不将其放入子模块?

如何将结构的实现移动到单独的文件中,而不将其放入子模块?
EN

Stack Overflow用户
提问于 2021-09-03 10:45:33
回答 1查看 395关注 0票数 2

我的主要职能是:

代码语言:javascript
复制
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

代码语言:javascript
复制
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::TerminalFactorytools::Terminal。我想要做的是让这两个结构在两个单独的文件中实现,因为tools模块将非常拥挤,我不想用数千行代码来干扰它。

我无法想出一种方法将这段代码移动到单独的文件中,并将其保存在tools中。当我将它移到其他文件时,我得到的是,在tools/mod.rs中,我必须定义mod

代码语言:javascript
复制
mod terminal;
mod terminal_factory;

但是这会将结构移动到tools::terminal_factory::TerminalFactorytools::terminal::Terminal,这不是我想要的。

这是如何在没有*.toml和货物的情况下以一种简朴的方式完成的?

我当然会使用货物,但我想事先了解如何在没有货物的情况下做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-03 10:48:14

当您不想公开这种模块化结构时,通常会重新导出更深层次的类型。

在这里,您的工具/mod.rs文件将是

代码语言:javascript
复制
mod terminal;
mod terminal_factory;

pub use {
    self::terminal::Terminal,
    self::terminal_factory::TerminalFactory,
};

pub use使外部代码能够像在上层模块中声明的那样使用TerminalFactory类型。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69043661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档