我正在尝试构造一个Defiler
结构,该结构拥有固定的序列和描述此序列中当前位置的内部状态。想法是可以对其进行迭代,但是有时可以将其重置为序列的开头。
我选择了一个迭代器作为内部状态来表示序列的当前值。这个想法是,当需要重置时,它将被丢弃并由新的迭代器代替。
这是到目前为止我最不喜欢的尝试:
use std::slice::IterMut;
struct Defiler<'a> {
// This sequence should not change during the whole
// lifetime of the struct, although I have not expressed it yet.
seq: Vec<u32>,
// Internal state pointing towards the next element to be
// yielded. It will be randomly replaced by a fresh one.
current: IterMut<'a, u32>,
// ...
}
impl<'a> Defiler<'a> {
fn new(mut seq: Vec<u32>) -> Self {
Defiler {
seq,
current: seq.iter_mut(), // move out of borrowed value, of course.
}
}
// Restart the iteration from scratch.
fn reset(&'a mut self) {
self.current = self.seq.iter_mut();
}
// ...
}
我了解为什么上面的内容无法编译,并且我知道我没有表达过很多希望编译器放心的事情:
seq
也不会在Defiler
的整个生命周期中增长或收缩。current
永远只会迭代seq
中拥有的值。我怎么写呢?