In meinem Programm vertrete ich eine Geschichte von Änderungen an Feldern einiger Objekte wie folgt:Gibt es ein Analog von nameof() von C# in Rust?
struct FieldChange {
property_name: &'static str,
// some other fields
}
let history = Vec<FieldChange>::new();
ich es so handhaben:
match field_change.property_name {
"name" => // do something,
"age" => // do something,
_ => {}
}
mit Lesbarkeit zu verbessern und zukünftige Refactoring erleichtern, I so etwas wie dies möchte schreiben:
match field_change.property_name {
nameof(Person::name) => // do something,
nameof(Person::age) => // do something,
_ => {}
}
wo nameof
erzeugt ein &str
Vertre ähnlich wie nameof
in C#.
Der wichtigste Punkt ich suche, ist, dass der Compiler überprüfen kann, ob die Felder vorhanden sind (beispielsweise in diesem Fall, ob Person
tatsächlich name
und age
Felder hat). Ist es möglich, die Feldnamen in Rust so zu extrahieren?
Danke für die Antwort. Leider funktioniert dieser Trick nicht mit dem Mustervergleich. Ich nehme an, dass prozedurale Makros mir helfen könnten, wenn es dazu kommt – xilec
Ah, richtig; Ich habe den 'match' Teil vergessen. Ich kann nichts dagegen tun: Wenn Sie den Namen * exists * geltend machen wollen, müssen Sie etwas tun, das es verwendet, und Sie können das nicht innerhalb eines Musters tun. Und nein, prozedurale Makros * werden nicht helfen, weil sie die gleichen Einschränkungen wie reguläre Makros haben: * sie können Namen nicht sehen *. Sie hätten etwas ähnliches ausstrahlen müssen. –