说我有这个文件层次结构:
main.rs
protocol/
protocol/mod.rs
protocol/struct.rs
Run Code Online (Sandbox Code Playgroud)
在struct.rs:
pub struct Struct {
members: i8
}
impl Struct {
pub fn new() -> Struct {
Struct { 4 }
}
}
Run Code Online (Sandbox Code Playgroud)
我如何访问它:
mod protocol;
protocol::Struct::new();
// As opposed to:
// protocol::struct::Struct::new();
Run Code Online (Sandbox Code Playgroud)
我已经试过的各种组合pub use和mod,但无可否认我的东西盲目乱抓.
是否有可能将结构(和它impl)拆分成一个单独的文件,而不必创建一个新的mod?
She*_*ter 13
简短的回答:用pub use Type在你的mod.rs.完整的例子如下:
我的结构:
src/
??? main.rs
??? protocol
? ??? thing.rs
??? protocol.rs
Run Code Online (Sandbox Code Playgroud)
main.rs
mod protocol;
fn main() {
let a = protocol::Thing::new();
println!("Hello, {:?}", a);
}
Run Code Online (Sandbox Code Playgroud)
协议/ mod.rs
pub use self::thing::Thing;
mod thing;
Run Code Online (Sandbox Code Playgroud)
协议/ thing.rs
#[derive(Debug)]
pub struct Thing(i8);
impl Thing {
pub fn new() -> Thing { Thing(4) }
}
Run Code Online (Sandbox Code Playgroud)
作为管家位,不要将文件调用与语言关键字相同的内容.struct导致编译问题,所以我重命名了.此外,您的结构创建语法不正确,因此我选择了此示例的较短版本^ _ ^.
并回答标题中提出的问题:文件和模块始终匹配,您不能将某些内容放入不同的文件中,也不能将其放在不同的模块中.您可以重新导出该类型,但它看起来不像它.
| 归档时间: |
|
| 查看次数: |
5526 次 |
| 最近记录: |