将结构移动到一个单独的文件而不拆分成一个单独的模块?
Move struct into a separate file without splitting into a separate module?
我有这个文件层次结构:
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
)拆分为一个单独的文件而无需创建新的 mod?
简短的回答:在 mod.rs
中使用 pub use Type
。完整示例如下:
我的结构:
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;
protocol/thing.rs
#[derive(Debug)]
pub struct Thing(i8);
impl Thing {
pub fn new() -> Thing { Thing(4) }
}
作为内务管理位,不要将文件称为语言关键字。 struct
导致编译有问题,所以改名了。另外,你的结构创建语法不正确,所以我为这个例子选择了较短的版本^_^。
并回答您标题中提出的问题:如果不使用深奥的功能,文件总是会创建一个新模块 — 您 不能 将某些内容放入不同的文件中把它放在不同的模块中。您可以 re-export 类型,但它看起来不像。
进一步解释:mod
关键字告诉编译器查找具有该名称的文件,并从当前文件中将其作为模块引用。例如,mod protocol;
将查找文件 protocol.rs
并表现得好像它包含了它的内容,类似于:
mod protocol {
// ... contents here
};
有关详细信息,请参阅 Rust by Example。
与mod.rs
:
src/
├── main.rs
└── protocol
├── mod.rs
└── thing.rs
protocol/thing.rs
pub struct Struct {
members: i8
}
impl Struct {
pub fn new() -> Struct {
Struct { members: 4 }
}
}
protocol/mod.rs
pub mod thing;
main.rs
mod protocol;
fn main() {
protocol::thing::Struct::new();
}
我有这个文件层次结构:
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
)拆分为一个单独的文件而无需创建新的 mod?
简短的回答:在 mod.rs
中使用 pub use Type
。完整示例如下:
我的结构:
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;
protocol/thing.rs
#[derive(Debug)]
pub struct Thing(i8);
impl Thing {
pub fn new() -> Thing { Thing(4) }
}
作为内务管理位,不要将文件称为语言关键字。 struct
导致编译有问题,所以改名了。另外,你的结构创建语法不正确,所以我为这个例子选择了较短的版本^_^。
并回答您标题中提出的问题:如果不使用深奥的功能,文件总是会创建一个新模块 — 您 不能 将某些内容放入不同的文件中把它放在不同的模块中。您可以 re-export 类型,但它看起来不像。
进一步解释:mod
关键字告诉编译器查找具有该名称的文件,并从当前文件中将其作为模块引用。例如,mod protocol;
将查找文件 protocol.rs
并表现得好像它包含了它的内容,类似于:
mod protocol {
// ... contents here
};
有关详细信息,请参阅 Rust by Example。
与mod.rs
:
src/
├── main.rs
└── protocol
├── mod.rs
└── thing.rs
protocol/thing.rs
pub struct Struct {
members: i8
}
impl Struct {
pub fn new() -> Struct {
Struct { members: 4 }
}
}
protocol/mod.rs
pub mod thing;
main.rs
mod protocol;
fn main() {
protocol::thing::Struct::new();
}