【发布时间】:2020-08-21 16:20:52
【问题描述】:
我有以下代码:
use std::{collections::HashMap, hash::Hash, rc::Rc};
#[derive(Debug)]
pub struct LFUCache<K: Hash + Eq, V> {
values: HashMap<Rc<K>, ValueCounter<V>>,
capacity: usize,
min_frequency: usize,
}
#[derive(Debug)]
struct ValueCounter<V> {
value: V,
count: usize,
}
impl<K: Hash + Eq, V> IntoIterator for LFUCache<K, V> {
type Item = (Rc<K>, V);
type IntoIter = std::collections::HashMap::IntoIter<Rc<K>, V>;
fn into_iter(self) -> Self::IntoIter {
return self
.values
.into_iter()
.map(|(key, valueCounter)| (key, valueCounter.value));
}
}
它抛出一个错误说:
error[E0107]: wrong number of type arguments: expected at least 2, found 0
--> src/lib.rs:18:21
|
18 | type IntoIter = std::collections::HashMap::IntoIter<Rc<K>, V>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected at least 2 type arguments
我查看了文档,我的用例似乎与 to the example 非常相似。
我该如何解决这个问题?
【问题讨论】:
-
顺便说一句,惯用的 Rust 使用
snake_case表示变量、方法、宏、字段和模块;UpperCamelCase用于类型和枚举变体;SCREAMING_SNAKE_CASE用于静态和常量。