【发布时间】:2020-04-09 21:25:49
【问题描述】:
我有一个哈希图的引用(下面代码中的data),我想将它克隆到一个新的、拥有的哈希图中。克隆参考给了我一个新的参考,这不是我需要的。
我还尝试在 data 引用上进行迭代 + 映射,并分别克隆键和值对,然后进行收集,但这也不起作用。这是一个最小的工作示例:
use core::cell::Cell;
use std::collections::HashMap;
use std::collections::HashSet;
use std::rc::Rc;
struct Dummy<K, V> {
dirty: Rc<Cell<bool>>,
data: Cell<Option<HashMap<K, HashSet<V>>>>,
}
impl<K, V> Dummy<K, V> {
fn persist(&self, prefix: &str, data: &HashMap<K, HashSet<V>>) {
self.dirty.set(true);
self.data.set(Some(data.clone()));
}
}
这给出了以下错误:
error[E0308]: mismatched types
--> src/lib.rs:14:28
|
14 | self.data.set(Some(data.clone()));
| ^^^^^^^^^^^^ expected struct `std::collections::HashMap`, found reference
|
= note: expected type `std::collections::HashMap<K, std::collections::HashSet<V>>`
found type `&std::collections::HashMap<K, std::collections::HashSet<V>>`
这段代码的目的是通过Dummy结构体观察hashmap的内容,用于单元测试。
我猜这个问题是因为给定泛型类型没有办法确定如何深度克隆键和值对象?
在给定对现有哈希图的引用的情况下,有没有办法创建新的哈希图?
【问题讨论】:
-
如果你使用
impl<K: Clone, V: Clone>会怎样?