我有一个带有HashMap类型属性的结构。我想为这个结构实现IntoIterator特性,这样我就可以迭代它的HashMap属性。问题是我遇到了一辈子的地狱:
pub struct ProcessList {
map: HashMap<ProcessPtr, usize>,
}
impl ProcessList {
pub fn new() -> ProcessList {
ProcessList {
map: HashMap::new(),
}
}
pub fn add(self, process: ProcessPtr, nb: usize) {
match self.map.contain_key(process) {
true => self.map[process] += nb,
false => self.map.insert(process, nb),
};
}
}
impl<'a> IntoIterator for ProcessList {
type Item = (&'a ProcessPtr, &'a usize);
type IntoIter = Iter<'a, ProcessPtr, usize>;
fn into_iter(self) -> Self::IntoIter {
self.map.into_iter()
}
}发布于 2016-02-28 17:11:47
查看IntoIterator如何在stdlib 来源中为HashMap实现
如果要为IntoIterator实现ProcessList,则根本不需要引用和生存期:
use std::collections::HashMap;
use std::collections::hash_map::IntoIter;
#[derive(Eq,PartialEq,Hash)]
pub struct ProcessPtr;
pub struct ProcessList {
map: HashMap<ProcessPtr, usize>,
}
impl ProcessList {
pub fn new() -> ProcessList {
ProcessList {
map: HashMap::new(),
}
}
pub fn add(self, process: ProcessPtr, nb: usize) {
/* Bunch of errors here
match self.map.contains_key(process) {
true => self.map[process] += nb,
false => self.map.insert(process, nb),
};
*/
}
}
impl IntoIterator for ProcessList {
type Item = (ProcessPtr, usize);
type IntoIter = IntoIter<ProcessPtr, usize>;
fn into_iter(self) -> Self::IntoIter {
self.map.into_iter()
}
}
fn main(){
}此外,您的代码还包含add函数中的一些错误。
https://stackoverflow.com/questions/35684136
复制相似问题