写一个结构体,变量内容作为字段名

Write a struct with variable content as the field name

我需要在其中编写一堆名称相似的结构。如:

pub struct ContactUpdate {
    pub full_name: String,
    pub full_address: String,
    /// .... many other fields
}

pub struct Contact {
    pub contact_id: Option<ObjectId>,
    pub full_name: String,
    pub full_address: String,
    pub created_at: DateTime
    /// .... many other fields
}

/// ... other structs with similar content/field name

我很懒。因此,与其手动对每个字段名称进行硬编码,我想我如何才能将结构的字段名称变成字符更少的内容,这样我就不必输入那么多了。还具有导出该常量并将其用于需要它的其他文件的其他好处。

pub const ID: &str = "contact_id";
pub const NAME: &str = "full_name";
pub const TIME: &str = "created_at";
pub const ADDR: &str = "full_address"; 

pub struct Contact {
    pub ID: Option<ObjectId>,
    pub NAME: String,
    pub ADDR: String,
    pub TIME: DateTime
    /// .... many other fields
}

pub struct ContactUpdate {
    pub NAME: String,
    pub ADDR: String,
    /// .... many other fields
}

这可能吗?

没有。不可能的。

如果你真的想要(不要!)你可以有一个宏。

然而,字段名称存在的全部原因是为了让程序员知道它们的含义。如果你想把它们当作常量使用,你只要不赋予它们任何意义,就可以完全摆脱它们。那时,您回到了变量名长度限制为 7-8 个字符的旧时代,人们使用各种糟糕且不可读的代码来处理它。不要那样做。