我有这个文件层次结构:
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
use
和mod
的各种组合,但诚然,我是在盲目地捅东西。
是否可以将结构(及其impl
)拆分为单独的文件,而无需创建新模式?
答案 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
导致编译问题,因此我将其重命名。此外,您的结构创建语法不正确,因此我选择了此示例的较短版本^ _ ^。
要回答标题中提出的问题:文件和模块始终匹配,不能将某些内容放入不同的文件中,而不将其放在不同的模块中。您可以重新导出该类型,但它看起来不像。