小编sqw*_*eek的帖子

你能控制借用一个结构而不是借用一个字段吗?

我正在研究一个涉及这些方面的结构的程序:

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)

我已经实现了一个迭代器来合并来自dataoverlay消费的信息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)

rust borrow-checker

4
推荐指数
2
解决办法
461
查看次数

标签 统计

borrow-checker ×1

rust ×1