将struct移动到单独的文件中而不拆分成单独的模块?

时间:2015-01-18 14:27:59

标签: module rust

我有这个文件层次结构:

main.rs
protocol/
protocol/mod.rs
protocol/struct.rs

struct.rs

pub struct Struct {
    members: i8
}

impl Struct {
    pub fn new() -> Struct {
        Struct { 4 }
    }
}

如何以下列方式访问它:

mod protocol;
protocol::Struct::new();
// As opposed to:
// protocol::struct::Struct::new();

我已经尝试了pub usemod的各种组合,但诚然,我是在盲目地捅东西。

是否可以将结构(及其impl)拆分为单独的文件,而无需创建新模式?

1 个答案:

答案 0 :(得分:12)

简短回答:在pub use Type中使用mod.rs。完整的例子如下:

我的结构:

src/
├── main.rs
├── protocol
│   └── thing.rs
└── protocol.rs

<强> main.rs

mod protocol;

fn main() {
    let a = protocol::Thing::new();
    println!("Hello, {:?}", a);
}

<强> protocol.rs

pub use self::thing::Thing;
mod thing;

协定/ thing.rs

#[derive(Debug)]
pub struct Thing(i8);

impl Thing {
    pub fn new() -> Thing { Thing(4) }
}

作为管家位,不要将文件调用与语言关键字相同。 struct导致编译问题,因此我将其重命名。此外,您的结构创建语法不正确,因此我选择了此示例的较短版本^ _ ^。

要回答标题中提出的问题:文件和模块始终匹配,不能将某些内容放入不同的文件中,而不将其放在不同的模块中。您可以重新导出该类型,但它看起来不像。