我正在研究一个涉及这些方面的结构的程序:
struct App {
data: Vec<u8>,
overlay: Vec<(usize, Vec<u8>)>,
sink: Sink,
}
Run Code Online (Sandbox Code Playgroud)
简而言之,该data字段包含一些字节,并且overlay是要在特定索引处插入的一系列字节序列.该Sink类型是不同的,它有一个功能类似不重要:
impl Sink {
fn process<'a>(&mut self, input: Vec<&'a [u8]>) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我已经实现了一个迭代器来合并来自data和overlay消费的信息Sink.
struct MergeIter<'a, 'b> {
data: &'a Vec<u8>,
overlay: &'b Vec<(usize, Vec<u8>)>,
... // iterator state etc.
}
impl<'a, 'b> Iterator for MergeIter<'a, 'b> {
type Item = &'a [u8];
...
}
Run Code Online (Sandbox Code Playgroud)
这是一个轻微的谎言,因为迭代器返回的每个&[u8]的生命周期并不总是原始的data.从中插入的数据overlay具有不同的生命周期,但我不知道如何更准确地对其进行注释.无论如何,借阅检查员似乎并不介意 - 以下方法有效:
fn merge<'a, 'b>(data: …Run Code Online (Sandbox Code Playgroud)