在我的程序中,我表示某些对象字段的更改历史记录,如下所示:
struct FieldChange {
property_name: &'static str,
// some other fields
}
let history = Vec<FieldChange>::new();
Run Code Online (Sandbox Code Playgroud)
我这样处理:
match field_change.property_name {
"name" => // do something,
"age" => // do something,
_ => {}
}
Run Code Online (Sandbox Code Playgroud)
为了提高可读性并方便将来的重构,我想写这样的内容:
match field_change.property_name {
nameof(Person::name) => // do something,
nameof(Person::age) => // do something,
_ => {}
}
Run Code Online (Sandbox Code Playgroud)
wherenameof生成&str字段的表示,类似于nameofC# 中的。
我正在寻找的要点是编译器可以验证字段是否存在(例如,在本例中,是否Person确实有name和age字段)。在 Rust 中是否可以像这样提取字段名称?
我有HashMap定制的哈希.这个项目HashMap没有实现特征Clone(它是一个特征),但有一个功能来克隆这样的项目:
use std::collections::HashMap;
use std::hash::BuildHasherDefault;
use fnv::FnvHasher;
trait Item {
fn get_id(&self) -> i32;
fn cloned(&self) -> Box<Item>;
}
#[derive(Clone)]
struct ItemImpl {
id: i32,
foo: i32
}
impl Item for ItemImpl {
fn get_id(&self) -> i32 { self.id }
fn cloned(&self) -> Box<Item> { Box::new(self.clone()) }
}
fn main() {
let hash_map = HashMap::<i32, Box<Item>, BuildHasherDefault<FnvHasher>>::default();
}
Run Code Online (Sandbox Code Playgroud)
我如何能够快速克隆hash_map(在代码中)并有效地克隆(不创建临时集合)?