Struct 如何使结构的所有字段公开可读,同时强制使用;新";建造师
许多结构需要强制使用构造函数来创建对象,但我希望对所有字段都具有公共读取权限 我需要通过Struct 如何使结构的所有字段公开可读,同时强制使用;新";建造师,struct,rust,public,serde,Struct,Rust,Public,Serde,许多结构需要强制使用构造函数来创建对象,但我希望对所有字段都具有公共读取权限 我需要通过bish.bash.bosh.wibble.wobble-bish.get_bash().get_bosh().get_wibble().get_wobble().get_wobble()访问几个级别,因为可读性和可能的性能原因,我不想去 我用的就是这个可怕的乱七八糟的东西: #[derive(Debug)] pub struct Foo { pub bar: u8, pub baz: u16
bish.bash.bosh.wibble.wobble
-bish.get_bash().get_bosh().get_wibble().get_wobble().get_wobble()
访问几个级别,因为可读性和可能的性能原因,我不想去
我用的就是这个可怕的乱七八糟的东西:
#[derive(Debug)]
pub struct Foo {
pub bar: u8,
pub baz: u16,
dummy: bool,
}
impl Foo {
pub fn new(bar: u8, baz: u16) -> Foo {
Foo {bar, baz, dummy: true}
}
}
这显然浪费了一小部分空间,而且dummy
给其他地方带来了不便
我该怎么做?多亏了@hellow,我现在有了一个有效的解决方案:
use serde::{Serialize, Deserialize}; // 1.0.115
#[derive(Serialize, Deserialize, Debug)]
pub struct Foo {
pub bar: u8,
pub baz: u16,
#[serde(skip)]
_private: (),
}
impl Foo {
pub fn new(bar: u8, baz: u16) -> Foo {
Foo {bar, baz, _private: ()}
}
}
这回答了你的问题吗?TL;Dr使用
()
而不是bool
,因为单元类型是零尺寸类型(ZST)@hellow谢谢,问题不一样,但答案的最后一部分是适用的。使用\u private:()
仍然需要我在序列化过程中处理它的存在-但我可以在serde
中解决这个问题。