Struct 避免酒吧生锈

Struct 避免酒吧生锈,struct,module,rust,public,Struct,Module,Rust,Public,我刚刚将我的程序拆分为一个可执行文件和一个充满结构定义的大文件(structs.rs) 为了将结构及其字段用于主可执行文件,我必须在每个结构定义和每个字段定义前面加上pub #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Foo { pub bar: u8, pub baz: [u8; 4] } 这降低了可读性 有没有办法避开所有这些酒吧 或者我应该使用另一种方法将程序分解为多个文件?这是意料之中的。模块和板

我刚刚将我的程序拆分为一个可执行文件和一个充满结构定义的大文件(structs.rs)

为了将结构及其字段用于主可执行文件,我必须在每个结构定义和每个字段定义前面加上
pub

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Foo {
    pub bar: u8,
    pub baz: [u8; 4]
}
这降低了可读性

有没有办法避开所有这些酒吧


或者我应该使用另一种方法将程序分解为多个文件?

这是意料之中的。模块和板条箱是Rust中的隐私边界。结构及其字段的默认隐私级别为“同一模块及其子模块”,因此父模块和同级模块需要具有接触结构字段的权限

在Rust结构中,通常只有几个字段,但这些字段可能有重要的不变量需要维护。例如,如果
Vec.len
是公共的,则可能会导致不安全的越界访问。作为预防措施,Rust要求程序员仔细考虑是否允许访问每个字段


拥有数千个结构或包含数千个字段的结构是不常见的,除非它们镜像了一些外部数据定义。如果是这样的话,请考虑用宏或<代码> Buff.R.<代码>自动生成结构定义。

我相信这是一种相当普遍的做法,所以可能没有别的办法了。不过,您可以尝试编写一个(相当简单)的proc宏,将所有字段标记为pub。“这会降低可读性。”是吗?@mcarton我明白您的意思,但如果1000行源文件中的900行以“pub”开头,则会出现问题。如果90%的代码行是字段声明,则会出现问题。在Rust中,默认情况下,一个文件是一个模块,它不像C那么自由,它完全取决于你在哪个头文件或源文件中放了什么。将结构定义放在一个文件中,并将impls放在另一个文件中,这不是Rust中的正常做法-不要像C中那样考虑头文件和源文件。但是,如果您确实想以自己的方式而不是惯用的Rust方式来做事情,那么这可能很有用: