我想實現一個迭代器,合併兩個排序的迭代器。我正在運行從結構中借用字段的問題。生鏽實現合併排序的迭代器
如何避免此錯誤?我嘗試使用借來的引用,但似乎沒有幫助,因爲最終我需要移動a_item和b_item的值。
use std::num::Saturating;
pub struct MergeSorted<A, T> {
a: T,
b: T,
a_item: Option<A>,
b_item: Option<A>,
}
impl<A: Ord, T: Iterator<A>> Iterator<A> for MergeSorted<A, T> {
#[inline]
fn next(&mut self) -> Option<A> {
match (self.a_item, self.b_item) {
(None, None) => None,
(None, Some(y)) => {
let result = self.b_item;
self.b_item = None;
return result;
}
(Some(x), None) => {
let result = self.a_item;
self.a_item = self.a.next();
result
}
(Some(x), Some(y)) => {
if x < y {
let result = self.a_item;
self.a_item = self.a.next();
result
} else {
let result = self.b_item;
self.b_item = self.b.next();
result
}
}
}
}
#[inline]
fn size_hint(&self) -> (uint, Option<uint>) {
// stub
(10, Some(100))
}
}
下面是具體的錯誤,這是對self.a_item和self.b_item的所有用法重複的。
error: cannot move out of dereference of `&mut`-pointer
match (self.a_item, self.b_item) {
^~~~~~~~~~~
謝謝您的深入解釋,這比我想象的要複雜。 – Joe