简短的回答:使用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);
}
协议.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
导致编译问题,所以我重命名了它。另外,您的结构创建语法不正确,因此我为此示例选择了较短的版本^_^。
并回答您标题中提出的问题:在不使用深奥功能的情况下,文件总是会创建一个新模块 - 您can't将某些内容放入不同的文件中,而不将其放入不同的模块中。您可以重新导出该类型,这样它看起来就不再是原来的样子了。
进一步解释:mod
关键字告诉编译器查找该名称的文件并将其作为模块从当前文件中引用。例如,mod protocol;
将寻找一个文件protocol.rs
并表现得好像它已包含其内容,类似于:
mod protocol {
// ... contents here
};
See Rust 实例 https://doc.rust-lang.org/rust-by-example/mod/split.html更多细节。