在我的程序中,我按照以下方式表示某些对象字段的更改历史:
我这样处理它:
为了提高可读性并便于未来重构,我想像这样写:
struct FieldChange {
property_name: &'static str,
// some other fields
}
let history = Vec<FieldChange>::new();
我这样处理它:
match field_change.property_name {
"name" => // do something,
"age" => // do something,
_ => {}
}
为了提高可读性并便于未来重构,我想像这样写:
match field_change.property_name {
nameof(Person::name) => // do something,
nameof(Person::age) => // do something,
_ => {}
}
nameof
生成一个字段的 &str
表示,类似于 C# 中的 nameof
。
我想要强调的主要点是,编译器可以验证字段是否存在(例如,在本例中,Person
是否确实有 name
和 age
字段)。在 Rust 中是否可能像这样提取字段名?
match
部分。这个我无能为力:如果你想断言名称存在,你必须做一些使用它的事情,而你不能在模式中做到这一点。不,过程宏不会有所帮助,因为它们在这里与常规宏具有相同的限制:它们无法看到名称。它们将必须发出类似的东西。 - DK.