我正在编写Rust中并发字典的基本结构,首先简单地将现有的HashMap包装在Arc::new(Mutex::new(hash_map_placeholder))
中。然而,几乎在我开始的时候,事情就开始变得糟透了。我将<K, V>
值传递给普通的HashMap时遇到问题,所以我甚至无法从包装版本开始。我目前收到以下错误:
concurrent_dictionary.rs:11:39: 11:40 error: use of undeclared type name `K`
concurrent_dictionary.rs:11 impl Default for ConcurrentDictionary<K, V> {
^
concurrent_dictionary.rs:11:42: 11:43 error: use of undeclared type name `V`
concurrent_dictionary.rs:11 impl Default for ConcurrentDictionary<K, V> {
我所知道的是与未正确传递的类型名称有关。怎么做到这一点?即使我摆脱了默认的impl,我仍然需要为ConcurrentDictionary::new()
编写相同的内容。这是代码:
use std::collections::HashMap;
use std::default::Default;
#[derive(Clone)]
pub struct ConcurrentDictionary<K, V> {
data: HashMap<K, V>,
}
impl Default for ConcurrentDictionary<K, V> {
#[inline]
fn default() -> ConcurrentDictionary<K, V> {
ConcurrentDictionary {
data: HashMap::<K, V>::new(),
}
}
}
impl<K, V> ConcurrentDictionary<K, V> {
#[inline]
pub fn new() -> ConcurrentDictionary<K, V> {
Default::default()
}
}
答案 0 :(得分:3)
您需要声明您使用的任何泛型类型:
impl<K, V> Default for ConcurrentDictionary<K, V> {
之后,您遇到K
和V
太泛型的问题,您需要将它们限制为实现Eq
和{的类型{1}}:
Hash
您需要对调用函数应用相同的限制。