我試圖創建類型的矢量的可變迭代器:Vec<Vec<(K, V)>>
可變的迭代器VEC <Vec<(K, V)>>
迭代器代碼:
pub struct IterMut<'a, K: 'a, V: 'a> {
iter: &'a mut Vec<Vec<(K, V)>>,
ix: usize,
inner_ix: usize,
}
impl<'a, K, V> Iterator for IterMut<'a, K, V> {
type Item = (&'a K, &'a mut V);
#[inline]
fn next(&mut self) -> Option<(&'a K, &'a mut V)> {
while self.iter.len() < self.ix {
while self.iter[self.ix].len() < self.inner_ix {
self.inner_ix += 1;
let (ref k, ref mut v) = self.iter[self.ix][self.inner_ix];
return Some((&k, &mut v));
}
self.ix += 1;
}
return None;
}
}
我得到的錯誤是:
error[E0495]: cannot infer an appropriate lifetime for lifetime parameter in function call due to conflicting requirements
--> src/main.rs:16:42
|
16 | let (ref k, ref mut v) = self.iter[self.ix][self.inner_ix];
| ^^^^^^^^^^^^^^^^^^
|
help: consider using an explicit lifetime parameter as shown: fn next(&'a mut self) -> Option<(&'a K, &'a mut V)>
--> src/main.rs:11:5
|
11 | fn next(&mut self) -> Option<(&'a K, &'a mut V)> {
| ^
顯然我有一生的問題,但我不知道如何告訴編譯器,這應該工作。
這是你應該如何實現可變迭代器還是有更好的方法?
哇!謝謝!這真是一個很好的答案!我實際上正在處理一個自定義的散列表。 –
'outer'爲空時'unwrap_or_else(...)'是否爲' –
@JesperAxelsson:是的。但我只是更新了這一點,不使用不安全的代碼,使用了一個技巧,即對一個空片段的可變引用可以具有「靜態」生命週期。我打賭@MatthieuM不知道這個。 :) –