小编xil*_*lec的帖子

Rust 中有 C# 中的 nameof() 类似吗?

在我的程序中,我表示某些对象字段的更改历史记录,如下所示:

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 中是否可以像这样提取字段名称?

reflection rust

8
推荐指数
1
解决办法
1414
查看次数

如何克隆包含盒装特征对象的HashMap?

我有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(在代码中)并有效地克隆(不创建临时集合)?

rust

2
推荐指数
1
解决办法
1512
查看次数

标签 统计

rust ×2

reflection ×1