1

这实际上是一个两部分的问题:

  1. 我可以在 Rust 的单独文件中拥有一个模块吗?

在此处输入图像描述

这是我的文件布局。是否可以有一个logging模块并在该模块内定义一组结构/特征,但在单独的物理文件(记录器,sql)中?

如果可能的话,这样的项目可以用当前的 Cargo 构建吗?

而且,如果可能的话,我如何logging在我的 app.rs 中引用我在模块中定义的结构?

我正在使用:rustc 0.12.0-pre-nightly (cf1381c1d 2014-07-26 00:46:16 +0000)

4

1 回答 1

14

严格来说,您不能将一个模块拆分为不同的文件,但您不需要这样做,因为您可以将子模块定义为类似的效果(这也是一个更好的解决方案)。

你可以像这样安排你的模块:

src/app.rs
src/logging/mod.rs // parent modules go into their own folder
src/logging/logger.rs // child modules can stay with their parent
src/logging/sql.rs

这是文件的样子

src/app.rs

mod logging;

pub struct App;

fn main() {
    let a = logging::Logger; // Ok
    let b = logging::Sql; // Error: didn't re-export Sql
}

src/logging/mod.rs

// `pub use ` re-exports these names
//  This allows app.rs or other modules to import them.
pub use self::logger::{Logger, LoggerTrait};
use self::sql::{Sql, SqlTrait};
use super::App; // imports App from the parent.

mod logger;
mod sql;

fn test() {
    let a = Logger; // Ok
    let b = Sql; // Ok
}

struct Foo;

// Ok
impl SqlTrait for Foo {
    fn sql(&mut self, what: &str) {}
}

src/logging/logger.rs

pub struct Logger;

pub trait LoggerTrait {
    fn log(&mut self, &str);
}

src/logging/sql.rs

pub struct Sql;

pub trait SqlTrait {
    fn sql(&mut self, &str);
}
于 2014-07-29T17:06:47.550 回答