Rust 中的模块系统围绕关键字 mod 构建。模块允许将代码逻辑上分割到文件和命名空间中。关键点:
pub 使元素在整个模块树中可用。pub(crate) — 在整个 crate 中可用(即库/project)。use mod_name::item)和别名。对于大型项目,建议使用模块树,仅通过 lib.rs 或 main.rs 描述公共接口,其余部分保持私有:
mod network; mod storage; pub use network::api;
如果结构体被声明为 pub,它会对其他 crate 可用吗?
答案:不,单单标记结构体为 pub 是不够的。还必须在对外 crate 开放的模块中声明它(pub mod),并且结构体的字段也必须是公共的,以便直接访问。
示例:
mod foo { pub struct Bar; } // Bar 在外部 crate 不可见,因为 foo 是私有的
故事
故事
故事
很多初学者创建了 pub 结构体,但将字段保留为私有,这使得无法在模块外初始化它们。结果,来自另一个模块的函数无法直接创建结构体,这导致错误,直到字段或构造函数被设为公共之后。